// export def_base_level , def_amount_of_people , def_skill_level , def_starting_resources , def_shipments_density , def_shared_vision , def_people_respawning ; export is_depot , number_of_breastworks , number_of_people , skill_level , starting_crates , starting_resources , shipments_density , morale_decreasing_time , amount_of_apemen , amount_of_siberit , respawning_time_min , respawning_time_max , BetaAI , RussianAI , DifficultyC , def_beta_ai , def_russian_ai , def_difficulty ; export Side_Teams , Teams ; export Side_Positions , Side_Nations , Team_Game ; export Position_Sides ; export depot_def , breastworks_def , start_def , normal_oil_deposits_locations , extra_oil_deposits_locations , normal_sib_deposits_locations , extra_sib_deposits_locations , battle_flags_id , def_siberite_bomb , siberite_bomb ; var commander ; var global_units , global_defined , soldiers_created ; var neng , nsci , nmech , nsol ; function read_multiplayer_and_game_parameters ; var i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
// if Multiplayer then
   4: LD_OWVAR 4
   8: IFFALSE 62
// begin Your_Side := mp_player_side ;
  10: LD_ADDR_OWVAR 2
  14: PUSH
  15: LD_OWVAR 7
  19: ST_TO_ADDR
// Side_Positions := mp_sides_positions ;
  20: LD_ADDR_EXP 28
  24: PUSH
  25: LD_OWVAR 17
  29: ST_TO_ADDR
// Side_Teams := mp_sides_teams ;
  30: LD_ADDR_EXP 26
  34: PUSH
  35: LD_OWVAR 15
  39: ST_TO_ADDR
// Side_Nations := mp_sides_nations ;
  40: LD_ADDR_EXP 29
  44: PUSH
  45: LD_OWVAR 16
  49: ST_TO_ADDR
// Teams := mp_teams ;
  50: LD_ADDR_EXP 27
  54: PUSH
  55: LD_OWVAR 12
  59: ST_TO_ADDR
// end else
  60: GO 236
// begin Your_Side := 1 ;
  62: LD_ADDR_OWVAR 2
  66: PUSH
  67: LD_INT 1
  69: ST_TO_ADDR
// Side_Positions := [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ;
  70: LD_ADDR_EXP 28
  74: PUSH
  75: LD_INT 1
  77: PUSH
  78: LD_INT 2
  80: PUSH
  81: LD_INT 3
  83: PUSH
  84: LD_INT 4
  86: PUSH
  87: LD_INT 5
  89: PUSH
  90: LD_INT 6
  92: PUSH
  93: LD_INT 7
  95: PUSH
  96: LD_INT 8
  98: PUSH
  99: EMPTY
 100: LIST
 101: LIST
 102: LIST
 103: LIST
 104: LIST
 105: LIST
 106: LIST
 107: LIST
 108: ST_TO_ADDR
// Side_Teams := [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ;
 109: LD_ADDR_EXP 26
 113: PUSH
 114: LD_INT 1
 116: PUSH
 117: LD_INT 2
 119: PUSH
 120: LD_INT 3
 122: PUSH
 123: LD_INT 4
 125: PUSH
 126: LD_INT 5
 128: PUSH
 129: LD_INT 6
 131: PUSH
 132: LD_INT 7
 134: PUSH
 135: LD_INT 8
 137: PUSH
 138: EMPTY
 139: LIST
 140: LIST
 141: LIST
 142: LIST
 143: LIST
 144: LIST
 145: LIST
 146: LIST
 147: ST_TO_ADDR
// Side_Nations := [ 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 ] ;
 148: LD_ADDR_EXP 29
 152: PUSH
 153: LD_INT 1
 155: PUSH
 156: LD_INT 2
 158: PUSH
 159: LD_INT 3
 161: PUSH
 162: LD_INT 1
 164: PUSH
 165: LD_INT 2
 167: PUSH
 168: LD_INT 3
 170: PUSH
 171: LD_INT 1
 173: PUSH
 174: LD_INT 2
 176: PUSH
 177: EMPTY
 178: LIST
 179: LIST
 180: LIST
 181: LIST
 182: LIST
 183: LIST
 184: LIST
 185: LIST
 186: ST_TO_ADDR
// Teams := [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ] , [ 6 ] ] ;
 187: LD_ADDR_EXP 27
 191: PUSH
 192: LD_INT 1
 194: PUSH
 195: EMPTY
 196: LIST
 197: PUSH
 198: LD_INT 2
 200: PUSH
 201: EMPTY
 202: LIST
 203: PUSH
 204: LD_INT 3
 206: PUSH
 207: EMPTY
 208: LIST
 209: PUSH
 210: LD_INT 4
 212: PUSH
 213: EMPTY
 214: LIST
 215: PUSH
 216: LD_INT 5
 218: PUSH
 219: EMPTY
 220: LIST
 221: PUSH
 222: LD_INT 6
 224: PUSH
 225: EMPTY
 226: LIST
 227: PUSH
 228: EMPTY
 229: LIST
 230: LIST
 231: LIST
 232: LIST
 233: LIST
 234: LIST
 235: ST_TO_ADDR
// end ; for i := 1 to 8 do
 236: LD_ADDR_VAR 0 2
 240: PUSH
 241: DOUBLE
 242: LD_INT 1
 244: DEC
 245: ST_TO_ADDR
 246: LD_INT 8
 248: PUSH
 249: FOR_TO
 250: IFFALSE 288
// if Multiplayer_GetPlayerIsSpec ( i ) then
 252: LD_VAR 0 2
 256: PPUSH
 257: CALL_OW 530
 261: IFFALSE 286
// Side_Positions := Replace ( Side_Positions , i , 0 ) ;
 263: LD_ADDR_EXP 28
 267: PUSH
 268: LD_EXP 28
 272: PPUSH
 273: LD_VAR 0 2
 277: PPUSH
 278: LD_INT 0
 280: PPUSH
 281: CALL_OW 1
 285: ST_TO_ADDR
 286: GO 249
 288: POP
 289: POP
// Position_Sides := [ 0 , 0 , 0 , 0 , 0 , 0 ] ;
 290: LD_ADDR_EXP 31
 294: PUSH
 295: LD_INT 0
 297: PUSH
 298: LD_INT 0
 300: PUSH
 301: LD_INT 0
 303: PUSH
 304: LD_INT 0
 306: PUSH
 307: LD_INT 0
 309: PUSH
 310: LD_INT 0
 312: PUSH
 313: EMPTY
 314: LIST
 315: LIST
 316: LIST
 317: LIST
 318: LIST
 319: LIST
 320: ST_TO_ADDR
// for i := 1 to 8 do
 321: LD_ADDR_VAR 0 2
 325: PUSH
 326: DOUBLE
 327: LD_INT 1
 329: DEC
 330: ST_TO_ADDR
 331: LD_INT 8
 333: PUSH
 334: FOR_TO
 335: IFFALSE 382
// if Side_Positions [ i ] then
 337: LD_EXP 28
 341: PUSH
 342: LD_VAR 0 2
 346: ARRAY
 347: IFFALSE 380
// Position_Sides := Replace ( Position_Sides , Side_Positions [ i ] , i ) ;
 349: LD_ADDR_EXP 31
 353: PUSH
 354: LD_EXP 31
 358: PPUSH
 359: LD_EXP 28
 363: PUSH
 364: LD_VAR 0 2
 368: ARRAY
 369: PPUSH
 370: LD_VAR 0 2
 374: PPUSH
 375: CALL_OW 1
 379: ST_TO_ADDR
 380: GO 334
 382: POP
 383: POP
// Team_Game := Side_Teams [ your_side ] ;
 384: LD_ADDR_EXP 30
 388: PUSH
 389: LD_EXP 26
 393: PUSH
 394: LD_OWVAR 2
 398: ARRAY
 399: ST_TO_ADDR
// if Multiplayer then
 400: LD_OWVAR 4
 404: IFFALSE 512
// begin def_base_level := GetMultiplayerSetting ( 0 ) ;
 406: LD_ADDR_EXP 1
 410: PUSH
 411: LD_INT 0
 413: PPUSH
 414: CALL_OW 426
 418: ST_TO_ADDR
// def_amount_of_people := GetMultiplayerSetting ( 1 ) ;
 419: LD_ADDR_EXP 2
 423: PUSH
 424: LD_INT 1
 426: PPUSH
 427: CALL_OW 426
 431: ST_TO_ADDR
// def_skill_level := GetMultiplayerSetting ( 2 ) ;
 432: LD_ADDR_EXP 3
 436: PUSH
 437: LD_INT 2
 439: PPUSH
 440: CALL_OW 426
 444: ST_TO_ADDR
// def_starting_resources := GetMultiplayerSetting ( 3 ) ;
 445: LD_ADDR_EXP 4
 449: PUSH
 450: LD_INT 3
 452: PPUSH
 453: CALL_OW 426
 457: ST_TO_ADDR
// def_shipments_density := GetMultiplayerSetting ( 4 ) ;
 458: LD_ADDR_EXP 5
 462: PUSH
 463: LD_INT 4
 465: PPUSH
 466: CALL_OW 426
 470: ST_TO_ADDR
// def_shared_vision := GetMultiplayerSetting ( 10 ) ;
 471: LD_ADDR_EXP 6
 475: PUSH
 476: LD_INT 10
 478: PPUSH
 479: CALL_OW 426
 483: ST_TO_ADDR
// def_people_respawning := GetMultiplayerSetting ( 13 ) ;
 484: LD_ADDR_EXP 7
 488: PUSH
 489: LD_INT 13
 491: PPUSH
 492: CALL_OW 426
 496: ST_TO_ADDR
// def_siberite_bomb := GetMultiplayerSetting ( 14 ) ;
 497: LD_ADDR_EXP 40
 501: PUSH
 502: LD_INT 14
 504: PPUSH
 505: CALL_OW 426
 509: ST_TO_ADDR
// end else
 510: GO 572
// begin Randomize ;
 512: CALL_OW 10
// def_base_level := 2 ;
 516: LD_ADDR_EXP 1
 520: PUSH
 521: LD_INT 2
 523: ST_TO_ADDR
// def_amount_of_people := 0 ;
 524: LD_ADDR_EXP 2
 528: PUSH
 529: LD_INT 0
 531: ST_TO_ADDR
// def_skill_level := 1 ;
 532: LD_ADDR_EXP 3
 536: PUSH
 537: LD_INT 1
 539: ST_TO_ADDR
// def_starting_resources := 2 ;
 540: LD_ADDR_EXP 4
 544: PUSH
 545: LD_INT 2
 547: ST_TO_ADDR
// def_shipments_density := 1 ;
 548: LD_ADDR_EXP 5
 552: PUSH
 553: LD_INT 1
 555: ST_TO_ADDR
// def_shared_vision := 1 ;
 556: LD_ADDR_EXP 6
 560: PUSH
 561: LD_INT 1
 563: ST_TO_ADDR
// def_people_respawning := 2 ;
 564: LD_ADDR_EXP 7
 568: PUSH
 569: LD_INT 2
 571: ST_TO_ADDR
// end ; is_depot := [ 0 , 1 , 2 ] [ def_base_level + 1 ] ;
 572: LD_ADDR_EXP 8
 576: PUSH
 577: LD_INT 0
 579: PUSH
 580: LD_INT 1
 582: PUSH
 583: LD_INT 2
 585: PUSH
 586: EMPTY
 587: LIST
 588: LIST
 589: LIST
 590: PUSH
 591: LD_EXP 1
 595: PUSH
 596: LD_INT 1
 598: PLUS
 599: ARRAY
 600: ST_TO_ADDR
// number_of_breastworks := [ 0 , 0 , 2 ] [ def_base_level + 1 ] ;
 601: LD_ADDR_EXP 9
 605: PUSH
 606: LD_INT 0
 608: PUSH
 609: LD_INT 0
 611: PUSH
 612: LD_INT 2
 614: PUSH
 615: EMPTY
 616: LIST
 617: LIST
 618: LIST
 619: PUSH
 620: LD_EXP 1
 624: PUSH
 625: LD_INT 1
 627: PLUS
 628: ARRAY
 629: ST_TO_ADDR
// number_of_people := [ 9 , 12 , 15 , 24 ] [ def_amount_of_people + 1 ] ;
 630: LD_ADDR_EXP 10
 634: PUSH
 635: LD_INT 9
 637: PUSH
 638: LD_INT 12
 640: PUSH
 641: LD_INT 15
 643: PUSH
 644: LD_INT 24
 646: PUSH
 647: EMPTY
 648: LIST
 649: LIST
 650: LIST
 651: LIST
 652: PUSH
 653: LD_EXP 2
 657: PUSH
 658: LD_INT 1
 660: PLUS
 661: ARRAY
 662: ST_TO_ADDR
// skill_level := [ 3 , 5 , 6 , 7 ] [ def_skill_level + 1 ] ;
 663: LD_ADDR_EXP 11
 667: PUSH
 668: LD_INT 3
 670: PUSH
 671: LD_INT 5
 673: PUSH
 674: LD_INT 6
 676: PUSH
 677: LD_INT 7
 679: PUSH
 680: EMPTY
 681: LIST
 682: LIST
 683: LIST
 684: LIST
 685: PUSH
 686: LD_EXP 3
 690: PUSH
 691: LD_INT 1
 693: PLUS
 694: ARRAY
 695: ST_TO_ADDR
// starting_resources := [ [ 0 , 0 , 0 ] , [ 30 , 100 , 100 ] , [ 50 , 120 , 120 ] , [ 80 , 160 , 160 ] ] [ def_starting_resources + 1 ] ;
 696: LD_ADDR_EXP 13
 700: PUSH
 701: LD_INT 0
 703: PUSH
 704: LD_INT 0
 706: PUSH
 707: LD_INT 0
 709: PUSH
 710: EMPTY
 711: LIST
 712: LIST
 713: LIST
 714: PUSH
 715: LD_INT 30
 717: PUSH
 718: LD_INT 100
 720: PUSH
 721: LD_INT 100
 723: PUSH
 724: EMPTY
 725: LIST
 726: LIST
 727: LIST
 728: PUSH
 729: LD_INT 50
 731: PUSH
 732: LD_INT 120
 734: PUSH
 735: LD_INT 120
 737: PUSH
 738: EMPTY
 739: LIST
 740: LIST
 741: LIST
 742: PUSH
 743: LD_INT 80
 745: PUSH
 746: LD_INT 160
 748: PUSH
 749: LD_INT 160
 751: PUSH
 752: EMPTY
 753: LIST
 754: LIST
 755: LIST
 756: PUSH
 757: EMPTY
 758: LIST
 759: LIST
 760: LIST
 761: LIST
 762: PUSH
 763: LD_EXP 4
 767: PUSH
 768: LD_INT 1
 770: PLUS
 771: ARRAY
 772: ST_TO_ADDR
// starting_crates := [ [ 10 ] , [ 7 , 14 ] , [ 6 , 12 , 18 ] , [ 5 , 10 , 15 , 20 ] ] [ def_starting_resources + 1 ] ;
 773: LD_ADDR_EXP 12
 777: PUSH
 778: LD_INT 10
 780: PUSH
 781: EMPTY
 782: LIST
 783: PUSH
 784: LD_INT 7
 786: PUSH
 787: LD_INT 14
 789: PUSH
 790: EMPTY
 791: LIST
 792: LIST
 793: PUSH
 794: LD_INT 6
 796: PUSH
 797: LD_INT 12
 799: PUSH
 800: LD_INT 18
 802: PUSH
 803: EMPTY
 804: LIST
 805: LIST
 806: LIST
 807: PUSH
 808: LD_INT 5
 810: PUSH
 811: LD_INT 10
 813: PUSH
 814: LD_INT 15
 816: PUSH
 817: LD_INT 20
 819: PUSH
 820: EMPTY
 821: LIST
 822: LIST
 823: LIST
 824: LIST
 825: PUSH
 826: EMPTY
 827: LIST
 828: LIST
 829: LIST
 830: LIST
 831: PUSH
 832: LD_EXP 4
 836: PUSH
 837: LD_INT 1
 839: PLUS
 840: ARRAY
 841: ST_TO_ADDR
// shipments_density := [ 150 , 125 , 100 , 50 ] [ def_shipments_density + 1 ] ;
 842: LD_ADDR_EXP 14
 846: PUSH
 847: LD_INT 150
 849: PUSH
 850: LD_INT 125
 852: PUSH
 853: LD_INT 100
 855: PUSH
 856: LD_INT 50
 858: PUSH
 859: EMPTY
 860: LIST
 861: LIST
 862: LIST
 863: LIST
 864: PUSH
 865: LD_EXP 5
 869: PUSH
 870: LD_INT 1
 872: PLUS
 873: ARRAY
 874: ST_TO_ADDR
// respawning_time_min := [ 0 0$0 , 5 5$00 , 3 3$0 ] [ def_people_respawning + 1 ] ;
 875: LD_ADDR_EXP 18
 879: PUSH
 880: LD_INT 0
 882: PUSH
 883: LD_INT 10500
 885: PUSH
 886: LD_INT 6300
 888: PUSH
 889: EMPTY
 890: LIST
 891: LIST
 892: LIST
 893: PUSH
 894: LD_EXP 7
 898: PUSH
 899: LD_INT 1
 901: PLUS
 902: ARRAY
 903: ST_TO_ADDR
// respawning_time_max := [ 0 0$0 , 15 15$00 , 5 5$0 ] [ def_people_respawning + 1 ] ;
 904: LD_ADDR_EXP 19
 908: PUSH
 909: LD_INT 0
 911: PUSH
 912: LD_INT 31500
 914: PUSH
 915: LD_INT 10500
 917: PUSH
 918: EMPTY
 919: LIST
 920: LIST
 921: LIST
 922: PUSH
 923: LD_EXP 7
 927: PUSH
 928: LD_INT 1
 930: PLUS
 931: ARRAY
 932: ST_TO_ADDR
// siberite_bomb := [ 0 , 1 , 2 , 3 ] [ def_siberite_bomb + 1 ] ;
 933: LD_ADDR_EXP 41
 937: PUSH
 938: LD_INT 0
 940: PUSH
 941: LD_INT 1
 943: PUSH
 944: LD_INT 2
 946: PUSH
 947: LD_INT 3
 949: PUSH
 950: EMPTY
 951: LIST
 952: LIST
 953: LIST
 954: LIST
 955: PUSH
 956: LD_EXP 40
 960: PUSH
 961: LD_INT 1
 963: PLUS
 964: ARRAY
 965: ST_TO_ADDR
// end ;
 966: LD_VAR 0 1
 970: RET
// function init_map ; var i , j ; begin
 971: LD_INT 0
 973: PPUSH
 974: PPUSH
 975: PPUSH
// depot_def := [ [ 83 , 5 , 2 ] , [ 104 , 6 , 3 ] , [ 136 , 135 , 5 ] , [ 174 , 135 , 5 ] , [ 51 , 43 , 1 ] , [ 69 , 88 , 2 ] , [ 164 , 59 , 4 ] , [ 178 , 83 , 4 ] ] ;
 976: LD_ADDR_EXP 32
 980: PUSH
 981: LD_INT 83
 983: PUSH
 984: LD_INT 5
 986: PUSH
 987: LD_INT 2
 989: PUSH
 990: EMPTY
 991: LIST
 992: LIST
 993: LIST
 994: PUSH
 995: LD_INT 104
 997: PUSH
 998: LD_INT 6
1000: PUSH
1001: LD_INT 3
1003: PUSH
1004: EMPTY
1005: LIST
1006: LIST
1007: LIST
1008: PUSH
1009: LD_INT 136
1011: PUSH
1012: LD_INT 135
1014: PUSH
1015: LD_INT 5
1017: PUSH
1018: EMPTY
1019: LIST
1020: LIST
1021: LIST
1022: PUSH
1023: LD_INT 174
1025: PUSH
1026: LD_INT 135
1028: PUSH
1029: LD_INT 5
1031: PUSH
1032: EMPTY
1033: LIST
1034: LIST
1035: LIST
1036: PUSH
1037: LD_INT 51
1039: PUSH
1040: LD_INT 43
1042: PUSH
1043: LD_INT 1
1045: PUSH
1046: EMPTY
1047: LIST
1048: LIST
1049: LIST
1050: PUSH
1051: LD_INT 69
1053: PUSH
1054: LD_INT 88
1056: PUSH
1057: LD_INT 2
1059: PUSH
1060: EMPTY
1061: LIST
1062: LIST
1063: LIST
1064: PUSH
1065: LD_INT 164
1067: PUSH
1068: LD_INT 59
1070: PUSH
1071: LD_INT 4
1073: PUSH
1074: EMPTY
1075: LIST
1076: LIST
1077: LIST
1078: PUSH
1079: LD_INT 178
1081: PUSH
1082: LD_INT 83
1084: PUSH
1085: LD_INT 4
1087: PUSH
1088: EMPTY
1089: LIST
1090: LIST
1091: LIST
1092: PUSH
1093: EMPTY
1094: LIST
1095: LIST
1096: LIST
1097: LIST
1098: LIST
1099: LIST
1100: LIST
1101: LIST
1102: ST_TO_ADDR
// for i in depot_def do
1103: LD_ADDR_VAR 0 2
1107: PUSH
1108: LD_EXP 32
1112: PUSH
1113: FOR_IN
1114: IFFALSE 1188
// start_def := start_def ^ [ [ ShiftX ( i [ 1 ] , i [ 3 ] , 10 ) , ShiftY ( i [ 2 ] , i [ 3 ] , 10 ) ] ] ;
1116: LD_ADDR_EXP 34
1120: PUSH
1121: LD_EXP 34
1125: PUSH
1126: LD_VAR 0 2
1130: PUSH
1131: LD_INT 1
1133: ARRAY
1134: PPUSH
1135: LD_VAR 0 2
1139: PUSH
1140: LD_INT 3
1142: ARRAY
1143: PPUSH
1144: LD_INT 10
1146: PPUSH
1147: CALL_OW 272
1151: PUSH
1152: LD_VAR 0 2
1156: PUSH
1157: LD_INT 2
1159: ARRAY
1160: PPUSH
1161: LD_VAR 0 2
1165: PUSH
1166: LD_INT 3
1168: ARRAY
1169: PPUSH
1170: LD_INT 10
1172: PPUSH
1173: CALL_OW 273
1177: PUSH
1178: EMPTY
1179: LIST
1180: LIST
1181: PUSH
1182: EMPTY
1183: LIST
1184: ADD
1185: ST_TO_ADDR
1186: GO 1113
1188: POP
1189: POP
// breastworks_def := [ [ [ 81 , 21 , 0 ] , [ 94 , 28 , 0 ] ] , [ [ 105 , 29 , 5 ] , [ 116 , 25 , 0 ] ] , [ [ 125 , 128 , 2 ] , [ 141 , 116 , 2 ] ] , [ [ 164 , 124 , 2 ] , [ 172 , 124 , 3 ] ] , [ [ 58 , 34 , 3 ] , [ 73 , 48 , 3 ] ] , [ [ 76 , 107 , 5 ] , [ 92 , 106 , 5 ] ] , [ [ 148 , 64 , 1 ] , [ 151 , 75 , 2 ] ] , [ [ 161 , 89 , 1 ] , [ 170 , 97 , 1 ] ] , ] ;
1190: LD_ADDR_EXP 33
1194: PUSH
1195: LD_INT 81
1197: PUSH
1198: LD_INT 21
1200: PUSH
1201: LD_INT 0
1203: PUSH
1204: EMPTY
1205: LIST
1206: LIST
1207: LIST
1208: PUSH
1209: LD_INT 94
1211: PUSH
1212: LD_INT 28
1214: PUSH
1215: LD_INT 0
1217: PUSH
1218: EMPTY
1219: LIST
1220: LIST
1221: LIST
1222: PUSH
1223: EMPTY
1224: LIST
1225: LIST
1226: PUSH
1227: LD_INT 105
1229: PUSH
1230: LD_INT 29
1232: PUSH
1233: LD_INT 5
1235: PUSH
1236: EMPTY
1237: LIST
1238: LIST
1239: LIST
1240: PUSH
1241: LD_INT 116
1243: PUSH
1244: LD_INT 25
1246: PUSH
1247: LD_INT 0
1249: PUSH
1250: EMPTY
1251: LIST
1252: LIST
1253: LIST
1254: PUSH
1255: EMPTY
1256: LIST
1257: LIST
1258: PUSH
1259: LD_INT 125
1261: PUSH
1262: LD_INT 128
1264: PUSH
1265: LD_INT 2
1267: PUSH
1268: EMPTY
1269: LIST
1270: LIST
1271: LIST
1272: PUSH
1273: LD_INT 141
1275: PUSH
1276: LD_INT 116
1278: PUSH
1279: LD_INT 2
1281: PUSH
1282: EMPTY
1283: LIST
1284: LIST
1285: LIST
1286: PUSH
1287: EMPTY
1288: LIST
1289: LIST
1290: PUSH
1291: LD_INT 164
1293: PUSH
1294: LD_INT 124
1296: PUSH
1297: LD_INT 2
1299: PUSH
1300: EMPTY
1301: LIST
1302: LIST
1303: LIST
1304: PUSH
1305: LD_INT 172
1307: PUSH
1308: LD_INT 124
1310: PUSH
1311: LD_INT 3
1313: PUSH
1314: EMPTY
1315: LIST
1316: LIST
1317: LIST
1318: PUSH
1319: EMPTY
1320: LIST
1321: LIST
1322: PUSH
1323: LD_INT 58
1325: PUSH
1326: LD_INT 34
1328: PUSH
1329: LD_INT 3
1331: PUSH
1332: EMPTY
1333: LIST
1334: LIST
1335: LIST
1336: PUSH
1337: LD_INT 73
1339: PUSH
1340: LD_INT 48
1342: PUSH
1343: LD_INT 3
1345: PUSH
1346: EMPTY
1347: LIST
1348: LIST
1349: LIST
1350: PUSH
1351: EMPTY
1352: LIST
1353: LIST
1354: PUSH
1355: LD_INT 76
1357: PUSH
1358: LD_INT 107
1360: PUSH
1361: LD_INT 5
1363: PUSH
1364: EMPTY
1365: LIST
1366: LIST
1367: LIST
1368: PUSH
1369: LD_INT 92
1371: PUSH
1372: LD_INT 106
1374: PUSH
1375: LD_INT 5
1377: PUSH
1378: EMPTY
1379: LIST
1380: LIST
1381: LIST
1382: PUSH
1383: EMPTY
1384: LIST
1385: LIST
1386: PUSH
1387: LD_INT 148
1389: PUSH
1390: LD_INT 64
1392: PUSH
1393: LD_INT 1
1395: PUSH
1396: EMPTY
1397: LIST
1398: LIST
1399: LIST
1400: PUSH
1401: LD_INT 151
1403: PUSH
1404: LD_INT 75
1406: PUSH
1407: LD_INT 2
1409: PUSH
1410: EMPTY
1411: LIST
1412: LIST
1413: LIST
1414: PUSH
1415: EMPTY
1416: LIST
1417: LIST
1418: PUSH
1419: LD_INT 161
1421: PUSH
1422: LD_INT 89
1424: PUSH
1425: LD_INT 1
1427: PUSH
1428: EMPTY
1429: LIST
1430: LIST
1431: LIST
1432: PUSH
1433: LD_INT 170
1435: PUSH
1436: LD_INT 97
1438: PUSH
1439: LD_INT 1
1441: PUSH
1442: EMPTY
1443: LIST
1444: LIST
1445: LIST
1446: PUSH
1447: EMPTY
1448: LIST
1449: LIST
1450: PUSH
1451: EMPTY
1452: LIST
1453: LIST
1454: LIST
1455: LIST
1456: LIST
1457: LIST
1458: LIST
1459: LIST
1460: ST_TO_ADDR
// end ;
1461: LD_VAR 0 1
1465: RET
// function set_shared_visions_and_alliances ; var i , j ; begin
1466: LD_INT 0
1468: PPUSH
1469: PPUSH
1470: PPUSH
// if not Team_Game then
1471: LD_EXP 30
1475: NOT
1476: IFFALSE 1574
// begin for i = 1 to 8 do
1478: LD_ADDR_VAR 0 2
1482: PUSH
1483: DOUBLE
1484: LD_INT 1
1486: DEC
1487: ST_TO_ADDR
1488: LD_INT 8
1490: PUSH
1491: FOR_TO
1492: IFFALSE 1570
// for j = 1 to 8 do
1494: LD_ADDR_VAR 0 3
1498: PUSH
1499: DOUBLE
1500: LD_INT 1
1502: DEC
1503: ST_TO_ADDR
1504: LD_INT 8
1506: PUSH
1507: FOR_TO
1508: IFFALSE 1566
// if i <> j then
1510: LD_VAR 0 2
1514: PUSH
1515: LD_VAR 0 3
1519: NONEQUAL
1520: IFFALSE 1544
// SetAttitude ( i , j , att_neutral , true ) else
1522: LD_VAR 0 2
1526: PPUSH
1527: LD_VAR 0 3
1531: PPUSH
1532: LD_INT 0
1534: PPUSH
1535: LD_INT 1
1537: PPUSH
1538: CALL_OW 80
1542: GO 1564
// SetAttitude ( i , j , att_friend , true ) ;
1544: LD_VAR 0 2
1548: PPUSH
1549: LD_VAR 0 3
1553: PPUSH
1554: LD_INT 1
1556: PPUSH
1557: LD_INT 1
1559: PPUSH
1560: CALL_OW 80
1564: GO 1507
1566: POP
1567: POP
1568: GO 1491
1570: POP
1571: POP
// end else
1572: GO 1749
// begin if def_shared_vision then
1574: LD_EXP 6
1578: IFFALSE 1643
// begin for i in Teams do
1580: LD_ADDR_VAR 0 2
1584: PUSH
1585: LD_EXP 27
1589: PUSH
1590: FOR_IN
1591: IFFALSE 1641
// for j = 2 to i do
1593: LD_ADDR_VAR 0 3
1597: PUSH
1598: DOUBLE
1599: LD_INT 2
1601: DEC
1602: ST_TO_ADDR
1603: LD_VAR 0 2
1607: PUSH
1608: FOR_TO
1609: IFFALSE 1637
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
1611: LD_VAR 0 2
1615: PUSH
1616: LD_VAR 0 3
1620: ARRAY
1621: PPUSH
1622: LD_VAR 0 2
1626: PUSH
1627: LD_INT 1
1629: ARRAY
1630: PPUSH
1631: CALL_OW 343
1635: GO 1608
1637: POP
1638: POP
1639: GO 1590
1641: POP
1642: POP
// end ; for i = 1 to 8 do
1643: LD_ADDR_VAR 0 2
1647: PUSH
1648: DOUBLE
1649: LD_INT 1
1651: DEC
1652: ST_TO_ADDR
1653: LD_INT 8
1655: PUSH
1656: FOR_TO
1657: IFFALSE 1747
// for j = 1 to 8 do
1659: LD_ADDR_VAR 0 3
1663: PUSH
1664: DOUBLE
1665: LD_INT 1
1667: DEC
1668: ST_TO_ADDR
1669: LD_INT 8
1671: PUSH
1672: FOR_TO
1673: IFFALSE 1743
// if Side_Teams [ i ] = Side_Teams [ j ] then
1675: LD_EXP 26
1679: PUSH
1680: LD_VAR 0 2
1684: ARRAY
1685: PUSH
1686: LD_EXP 26
1690: PUSH
1691: LD_VAR 0 3
1695: ARRAY
1696: EQUAL
1697: IFFALSE 1721
// SetAttitude ( i , j , att_friend , true ) else
1699: LD_VAR 0 2
1703: PPUSH
1704: LD_VAR 0 3
1708: PPUSH
1709: LD_INT 1
1711: PPUSH
1712: LD_INT 1
1714: PPUSH
1715: CALL_OW 80
1719: GO 1741
// SetAttitude ( i , j , att_enemy , true ) ;
1721: LD_VAR 0 2
1725: PPUSH
1726: LD_VAR 0 3
1730: PPUSH
1731: LD_INT 2
1733: PPUSH
1734: LD_INT 1
1736: PPUSH
1737: CALL_OW 80
1741: GO 1672
1743: POP
1744: POP
1745: GO 1656
1747: POP
1748: POP
// end ; end ;
1749: LD_VAR 0 1
1753: RET
// function prepare_people ( count , cl , x , y , r ) ; var i , j , un ; begin
1754: LD_INT 0
1756: PPUSH
1757: PPUSH
1758: PPUSH
1759: PPUSH
// result := [ ] ;
1760: LD_ADDR_VAR 0 6
1764: PUSH
1765: EMPTY
1766: ST_TO_ADDR
// for i := 1 to count do
1767: LD_ADDR_VAR 0 7
1771: PUSH
1772: DOUBLE
1773: LD_INT 1
1775: DEC
1776: ST_TO_ADDR
1777: LD_VAR 0 1
1781: PUSH
1782: FOR_TO
1783: IFFALSE 2179
// begin uc_direction := Rand ( 0 , 5 ) ;
1785: LD_ADDR_OWVAR 24
1789: PUSH
1790: LD_INT 0
1792: PPUSH
1793: LD_INT 5
1795: PPUSH
1796: CALL_OW 12
1800: ST_TO_ADDR
// if commander then
1801: LD_LOC 1
1805: IFFALSE 1914
// begin hc_name := mp_sides_players_names [ uc_side ] ;
1807: LD_ADDR_OWVAR 26
1811: PUSH
1812: LD_OWVAR 19
1816: PUSH
1817: LD_OWVAR 20
1821: ARRAY
1822: ST_TO_ADDR
// PrepareHuman ( Rand ( 1 , 2 ) , cl , skill_level + 2 ) ;
1823: LD_INT 1
1825: PPUSH
1826: LD_INT 2
1828: PPUSH
1829: CALL_OW 12
1833: PPUSH
1834: LD_VAR 0 2
1838: PPUSH
1839: LD_EXP 11
1843: PUSH
1844: LD_INT 2
1846: PLUS
1847: PPUSH
1848: CALL_OW 380
// hc_importance := 105 ;
1852: LD_ADDR_OWVAR 32
1856: PUSH
1857: LD_INT 105
1859: ST_TO_ADDR
// commander := false ;
1860: LD_ADDR_LOC 1
1864: PUSH
1865: LD_INT 0
1867: ST_TO_ADDR
// if Multiplayer then
1868: LD_OWVAR 4
1872: IFFALSE 1912
// begin hc_gallery := MULTIAVATARS ;
1874: LD_ADDR_OWVAR 33
1878: PUSH
1879: LD_STRING MULTIAVATARS
1881: ST_TO_ADDR
// hc_face_number := Multiplayer_GetPlayerSideNum ( uc_side ) ;
1882: LD_ADDR_OWVAR 34
1886: PUSH
1887: LD_OWVAR 20
1891: PPUSH
1892: CALL_OW 525
1896: ST_TO_ADDR
// hc_sex := Multiplayer_GetPlayerSex ( uc_side ) ;
1897: LD_ADDR_OWVAR 27
1901: PUSH
1902: LD_OWVAR 20
1906: PPUSH
1907: CALL_OW 526
1911: ST_TO_ADDR
// end ; end else
1912: GO 1977
// begin hc_name :=  ;
1914: LD_ADDR_OWVAR 26
1918: PUSH
1919: LD_STRING 
1921: ST_TO_ADDR
// PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level ) ;
1922: LD_INT 1
1924: PPUSH
1925: LD_INT 2
1927: PPUSH
1928: CALL_OW 12
1932: PPUSH
1933: LD_VAR 0 2
1937: PPUSH
1938: LD_EXP 11
1942: PPUSH
1943: CALL_OW 380
// hc_importance := 0 ;
1947: LD_ADDR_OWVAR 32
1951: PUSH
1952: LD_INT 0
1954: ST_TO_ADDR
// if Multiplayer then
1955: LD_OWVAR 4
1959: IFFALSE 1977
// begin hc_gallery :=  ;
1961: LD_ADDR_OWVAR 33
1965: PUSH
1966: LD_STRING 
1968: ST_TO_ADDR
// hc_face_number := 0 ;
1969: LD_ADDR_OWVAR 34
1973: PUSH
1974: LD_INT 0
1976: ST_TO_ADDR
// end ; end ; un := CreateHuman ;
1977: LD_ADDR_VAR 0 9
1981: PUSH
1982: CALL_OW 44
1986: ST_TO_ADDR
// if global_defined then
1987: LD_LOC 3
1991: IFFALSE 2131
// begin if ( cl = class_soldier ) then
1993: LD_VAR 0 2
1997: PUSH
1998: LD_INT 1
2000: EQUAL
2001: IFFALSE 2021
// j := i + soldiers_created else
2003: LD_ADDR_VAR 0 8
2007: PUSH
2008: LD_VAR 0 7
2012: PUSH
2013: LD_LOC 4
2017: PLUS
2018: ST_TO_ADDR
2019: GO 2031
// j := i ;
2021: LD_ADDR_VAR 0 8
2025: PUSH
2026: LD_VAR 0 7
2030: ST_TO_ADDR
// CopySkills ( global_units [ cl ] [ j ] , un ) ;
2031: LD_LOC 2
2035: PUSH
2036: LD_VAR 0 2
2040: ARRAY
2041: PUSH
2042: LD_VAR 0 8
2046: ARRAY
2047: PPUSH
2048: LD_VAR 0 9
2052: PPUSH
2053: CALL_OW 510
// SetAttr ( un , attr_speed , GetAttr ( global_units [ cl ] [ j ] , attr_speed ) ) ;
2057: LD_VAR 0 9
2061: PPUSH
2062: LD_INT 2
2064: PPUSH
2065: LD_LOC 2
2069: PUSH
2070: LD_VAR 0 2
2074: ARRAY
2075: PUSH
2076: LD_VAR 0 8
2080: ARRAY
2081: PPUSH
2082: LD_INT 2
2084: PPUSH
2085: CALL_OW 260
2089: PPUSH
2090: CALL_OW 239
// SetAttr ( un , attr_stamina , GetAttr ( global_units [ cl ] [ j ] , attr_stamina ) ) ;
2094: LD_VAR 0 9
2098: PPUSH
2099: LD_INT 1
2101: PPUSH
2102: LD_LOC 2
2106: PUSH
2107: LD_VAR 0 2
2111: ARRAY
2112: PUSH
2113: LD_VAR 0 8
2117: ARRAY
2118: PPUSH
2119: LD_INT 1
2121: PPUSH
2122: CALL_OW 260
2126: PPUSH
2127: CALL_OW 239
// end ; PlaceUnitXYR ( un , x , y , r , false ) ;
2131: LD_VAR 0 9
2135: PPUSH
2136: LD_VAR 0 3
2140: PPUSH
2141: LD_VAR 0 4
2145: PPUSH
2146: LD_VAR 0 5
2150: PPUSH
2151: LD_INT 0
2153: PPUSH
2154: CALL_OW 50
// result := result ^ [ un ] ;
2158: LD_ADDR_VAR 0 6
2162: PUSH
2163: LD_VAR 0 6
2167: PUSH
2168: LD_VAR 0 9
2172: PUSH
2173: EMPTY
2174: LIST
2175: ADD
2176: ST_TO_ADDR
// end ;
2177: GO 1782
2179: POP
2180: POP
// if not global_defined then
2181: LD_LOC 3
2185: NOT
2186: IFFALSE 2264
// if ( global_units >= cl ) then
2188: LD_LOC 2
2192: PUSH
2193: LD_VAR 0 2
2197: GREATEREQUAL
2198: IFFALSE 2239
// global_units := Replace ( global_units , cl , global_units [ cl ] ^ result ) else
2200: LD_ADDR_LOC 2
2204: PUSH
2205: LD_LOC 2
2209: PPUSH
2210: LD_VAR 0 2
2214: PPUSH
2215: LD_LOC 2
2219: PUSH
2220: LD_VAR 0 2
2224: ARRAY
2225: PUSH
2226: LD_VAR 0 6
2230: ADD
2231: PPUSH
2232: CALL_OW 1
2236: ST_TO_ADDR
2237: GO 2264
// global_units := Replace ( global_units , cl , result ) ;
2239: LD_ADDR_LOC 2
2243: PUSH
2244: LD_LOC 2
2248: PPUSH
2249: LD_VAR 0 2
2253: PPUSH
2254: LD_VAR 0 6
2258: PPUSH
2259: CALL_OW 1
2263: ST_TO_ADDR
// end ;
2264: LD_VAR 0 6
2268: RET
// function prepare_side ( side ) ; var pos , x , y , dir , i , r , sol , br , dep ; begin
2269: LD_INT 0
2271: PPUSH
2272: PPUSH
2273: PPUSH
2274: PPUSH
2275: PPUSH
2276: PPUSH
2277: PPUSH
2278: PPUSH
2279: PPUSH
2280: PPUSH
// pos := Side_Positions [ side ] ;
2281: LD_ADDR_VAR 0 3
2285: PUSH
2286: LD_EXP 28
2290: PUSH
2291: LD_VAR 0 1
2295: ARRAY
2296: ST_TO_ADDR
// uc_nation := Side_Nations [ side ] ;
2297: LD_ADDR_OWVAR 21
2301: PUSH
2302: LD_EXP 29
2306: PUSH
2307: LD_VAR 0 1
2311: ARRAY
2312: ST_TO_ADDR
// uc_side := side ;
2313: LD_ADDR_OWVAR 20
2317: PUSH
2318: LD_VAR 0 1
2322: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
2323: LD_ADDR_VAR 0 4
2327: PUSH
2328: LD_EXP 32
2332: PUSH
2333: LD_VAR 0 3
2337: ARRAY
2338: PUSH
2339: LD_INT 1
2341: ARRAY
2342: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
2343: LD_ADDR_VAR 0 5
2347: PUSH
2348: LD_EXP 32
2352: PUSH
2353: LD_VAR 0 3
2357: ARRAY
2358: PUSH
2359: LD_INT 2
2361: ARRAY
2362: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
2363: LD_ADDR_VAR 0 6
2367: PUSH
2368: LD_EXP 32
2372: PUSH
2373: LD_VAR 0 3
2377: ARRAY
2378: PUSH
2379: LD_INT 3
2381: ARRAY
2382: ST_TO_ADDR
// if is_depot then
2383: LD_EXP 8
2387: IFFALSE 2494
// begin bc_type = b_depot ;
2389: LD_ADDR_OWVAR 42
2393: PUSH
2394: LD_INT 0
2396: ST_TO_ADDR
// dep := CreateAndPlaceBuildingXYD ( x , y , dir ) ;
2397: LD_ADDR_VAR 0 11
2401: PUSH
2402: LD_VAR 0 4
2406: PPUSH
2407: LD_VAR 0 5
2411: PPUSH
2412: LD_VAR 0 6
2416: PPUSH
2417: CALL_OW 47
2421: ST_TO_ADDR
// SetBName ( dep , @ & side ) ;
2422: LD_VAR 0 11
2426: PPUSH
2427: LD_STRING @
2429: PUSH
2430: LD_VAR 0 1
2434: STR
2435: PPUSH
2436: CALL_OW 500
// SetResourceType ( GetBase ( dep ) , mat_cans , starting_resources [ mat_cans ] ) ;
2440: LD_VAR 0 11
2444: PPUSH
2445: CALL_OW 274
2449: PPUSH
2450: LD_INT 1
2452: PPUSH
2453: LD_EXP 13
2457: PUSH
2458: LD_INT 1
2460: ARRAY
2461: PPUSH
2462: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_oil , starting_resources [ mat_oil ] ) ;
2466: LD_VAR 0 11
2470: PPUSH
2471: CALL_OW 274
2475: PPUSH
2476: LD_INT 2
2478: PPUSH
2479: LD_EXP 13
2483: PUSH
2484: LD_INT 2
2486: ARRAY
2487: PPUSH
2488: CALL_OW 277
// end else
2492: GO 2638
// begin for i := 1 to 3 do
2494: LD_ADDR_VAR 0 7
2498: PUSH
2499: DOUBLE
2500: LD_INT 1
2502: DEC
2503: ST_TO_ADDR
2504: LD_INT 3
2506: PUSH
2507: FOR_TO
2508: IFFALSE 2636
// begin r := starting_resources [ i ] ;
2510: LD_ADDR_VAR 0 8
2514: PUSH
2515: LD_EXP 13
2519: PUSH
2520: LD_VAR 0 7
2524: ARRAY
2525: ST_TO_ADDR
// while r >= 10 do
2526: LD_VAR 0 8
2530: PUSH
2531: LD_INT 10
2533: GREATEREQUAL
2534: IFFALSE 2634
// if r > 50 then
2536: LD_VAR 0 8
2540: PUSH
2541: LD_INT 50
2543: GREATER
2544: IFFALSE 2590
// begin CreateResourcesXYR ( i , 5 , x , y , 4 , false ) ;
2546: LD_VAR 0 7
2550: PPUSH
2551: LD_INT 5
2553: PPUSH
2554: LD_VAR 0 4
2558: PPUSH
2559: LD_VAR 0 5
2563: PPUSH
2564: LD_INT 4
2566: PPUSH
2567: LD_INT 0
2569: PPUSH
2570: CALL_OW 60
// r := r - 50 ;
2574: LD_ADDR_VAR 0 8
2578: PUSH
2579: LD_VAR 0 8
2583: PUSH
2584: LD_INT 50
2586: MINUS
2587: ST_TO_ADDR
// end else
2588: GO 2632
// begin CreateResourcesXYR ( i , r div 10 , x , y , 4 , false ) ;
2590: LD_VAR 0 7
2594: PPUSH
2595: LD_VAR 0 8
2599: PUSH
2600: LD_INT 10
2602: DIV
2603: PPUSH
2604: LD_VAR 0 4
2608: PPUSH
2609: LD_VAR 0 5
2613: PPUSH
2614: LD_INT 4
2616: PPUSH
2617: LD_INT 0
2619: PPUSH
2620: CALL_OW 60
// r := 0 ;
2624: LD_ADDR_VAR 0 8
2628: PUSH
2629: LD_INT 0
2631: ST_TO_ADDR
// end ;
2632: GO 2526
// end ;
2634: GO 2507
2636: POP
2637: POP
// end ; for r in starting_crates do
2638: LD_ADDR_VAR 0 8
2642: PUSH
2643: LD_EXP 12
2647: PUSH
2648: FOR_IN
2649: IFFALSE 2681
// CreateResourcesXYR ( mat_cans , 5 , x , y , r , false ) ;
2651: LD_INT 1
2653: PPUSH
2654: LD_INT 5
2656: PPUSH
2657: LD_VAR 0 4
2661: PPUSH
2662: LD_VAR 0 5
2666: PPUSH
2667: LD_VAR 0 8
2671: PPUSH
2672: LD_INT 0
2674: PPUSH
2675: CALL_OW 60
2679: GO 2648
2681: POP
2682: POP
// commander := true ;
2683: LD_ADDR_LOC 1
2687: PUSH
2688: LD_INT 1
2690: ST_TO_ADDR
// soldiers_created := 0 ;
2691: LD_ADDR_LOC 4
2695: PUSH
2696: LD_INT 0
2698: ST_TO_ADDR
// for i := 1 to number_of_breastworks do
2699: LD_ADDR_VAR 0 7
2703: PUSH
2704: DOUBLE
2705: LD_INT 1
2707: DEC
2708: ST_TO_ADDR
2709: LD_EXP 9
2713: PUSH
2714: FOR_TO
2715: IFFALSE 2937
// begin x := breastworks_def [ pos ] [ i ] [ 1 ] ;
2717: LD_ADDR_VAR 0 4
2721: PUSH
2722: LD_EXP 33
2726: PUSH
2727: LD_VAR 0 3
2731: ARRAY
2732: PUSH
2733: LD_VAR 0 7
2737: ARRAY
2738: PUSH
2739: LD_INT 1
2741: ARRAY
2742: ST_TO_ADDR
// y := breastworks_def [ pos ] [ i ] [ 2 ] ;
2743: LD_ADDR_VAR 0 5
2747: PUSH
2748: LD_EXP 33
2752: PUSH
2753: LD_VAR 0 3
2757: ARRAY
2758: PUSH
2759: LD_VAR 0 7
2763: ARRAY
2764: PUSH
2765: LD_INT 2
2767: ARRAY
2768: ST_TO_ADDR
// dir := breastworks_def [ pos ] [ i ] [ 3 ] ;
2769: LD_ADDR_VAR 0 6
2773: PUSH
2774: LD_EXP 33
2778: PUSH
2779: LD_VAR 0 3
2783: ARRAY
2784: PUSH
2785: LD_VAR 0 7
2789: ARRAY
2790: PUSH
2791: LD_INT 3
2793: ARRAY
2794: ST_TO_ADDR
// bc_type := b_breastwork ;
2795: LD_ADDR_OWVAR 42
2799: PUSH
2800: LD_INT 31
2802: ST_TO_ADDR
// br := CreateAndPlaceBuildingXYD ( x , y , dir ) ;
2803: LD_ADDR_VAR 0 10
2807: PUSH
2808: LD_VAR 0 4
2812: PPUSH
2813: LD_VAR 0 5
2817: PPUSH
2818: LD_VAR 0 6
2822: PPUSH
2823: CALL_OW 47
2827: ST_TO_ADDR
// x := ShiftX ( x , dir , 2 ) ;
2828: LD_ADDR_VAR 0 4
2832: PUSH
2833: LD_VAR 0 4
2837: PPUSH
2838: LD_VAR 0 6
2842: PPUSH
2843: LD_INT 2
2845: PPUSH
2846: CALL_OW 272
2850: ST_TO_ADDR
// y := ShiftY ( y , dir , 2 ) ;
2851: LD_ADDR_VAR 0 5
2855: PUSH
2856: LD_VAR 0 5
2860: PPUSH
2861: LD_VAR 0 6
2865: PPUSH
2866: LD_INT 2
2868: PPUSH
2869: CALL_OW 273
2873: ST_TO_ADDR
// sol := prepare_people ( 1 , class_soldier , x , y , 0 ) [ 1 ] ;
2874: LD_ADDR_VAR 0 9
2878: PUSH
2879: LD_INT 1
2881: PPUSH
2882: LD_INT 1
2884: PPUSH
2885: LD_VAR 0 4
2889: PPUSH
2890: LD_VAR 0 5
2894: PPUSH
2895: LD_INT 0
2897: PPUSH
2898: CALL 1754 0 5
2902: PUSH
2903: LD_INT 1
2905: ARRAY
2906: ST_TO_ADDR
// soldiers_created := soldiers_created + 1 ;
2907: LD_ADDR_LOC 4
2911: PUSH
2912: LD_LOC 4
2916: PUSH
2917: LD_INT 1
2919: PLUS
2920: ST_TO_ADDR
// ComEnterUnit ( sol , br ) ;
2921: LD_VAR 0 9
2925: PPUSH
2926: LD_VAR 0 10
2930: PPUSH
2931: CALL_OW 120
// end ;
2935: GO 2714
2937: POP
2938: POP
// x := start_def [ pos ] [ 1 ] ;
2939: LD_ADDR_VAR 0 4
2943: PUSH
2944: LD_EXP 34
2948: PUSH
2949: LD_VAR 0 3
2953: ARRAY
2954: PUSH
2955: LD_INT 1
2957: ARRAY
2958: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
2959: LD_ADDR_VAR 0 5
2963: PUSH
2964: LD_EXP 34
2968: PUSH
2969: LD_VAR 0 3
2973: ARRAY
2974: PUSH
2975: LD_INT 2
2977: ARRAY
2978: ST_TO_ADDR
// prepare_people ( nsol - number_of_breastworks , class_soldier , x , y , 5 ) ;
2979: LD_LOC 8
2983: PUSH
2984: LD_EXP 9
2988: MINUS
2989: PPUSH
2990: LD_INT 1
2992: PPUSH
2993: LD_VAR 0 4
2997: PPUSH
2998: LD_VAR 0 5
3002: PPUSH
3003: LD_INT 5
3005: PPUSH
3006: CALL 1754 0 5
// prepare_people ( neng , class_engineer , x , y , 5 ) ;
3010: LD_LOC 5
3014: PPUSH
3015: LD_INT 2
3017: PPUSH
3018: LD_VAR 0 4
3022: PPUSH
3023: LD_VAR 0 5
3027: PPUSH
3028: LD_INT 5
3030: PPUSH
3031: CALL 1754 0 5
// prepare_people ( nmech , class_mechanic , x , y , 5 ) ;
3035: LD_LOC 7
3039: PPUSH
3040: LD_INT 3
3042: PPUSH
3043: LD_VAR 0 4
3047: PPUSH
3048: LD_VAR 0 5
3052: PPUSH
3053: LD_INT 5
3055: PPUSH
3056: CALL 1754 0 5
// prepare_people ( nsci , class_scientistic , x , y , 5 ) ;
3060: LD_LOC 6
3064: PPUSH
3065: LD_INT 4
3067: PPUSH
3068: LD_VAR 0 4
3072: PPUSH
3073: LD_VAR 0 5
3077: PPUSH
3078: LD_INT 5
3080: PPUSH
3081: CALL 1754 0 5
// global_defined := true ;
3085: LD_ADDR_LOC 3
3089: PUSH
3090: LD_INT 1
3092: ST_TO_ADDR
// end ;
3093: LD_VAR 0 2
3097: RET
// function prepare_sides ; var i ; begin
3098: LD_INT 0
3100: PPUSH
3101: PPUSH
// global_units := [ ] ;
3102: LD_ADDR_LOC 2
3106: PUSH
3107: EMPTY
3108: ST_TO_ADDR
// global_defined := false ;
3109: LD_ADDR_LOC 3
3113: PUSH
3114: LD_INT 0
3116: ST_TO_ADDR
// CountClassMembers ;
3117: CALL 3167 0 0
// for i := 1 to 8 do
3121: LD_ADDR_VAR 0 2
3125: PUSH
3126: DOUBLE
3127: LD_INT 1
3129: DEC
3130: ST_TO_ADDR
3131: LD_INT 8
3133: PUSH
3134: FOR_TO
3135: IFFALSE 3160
// if Side_Positions [ i ] then
3137: LD_EXP 28
3141: PUSH
3142: LD_VAR 0 2
3146: ARRAY
3147: IFFALSE 3158
// prepare_side ( i ) ;
3149: LD_VAR 0 2
3153: PPUSH
3154: CALL 2269 0 1
3158: GO 3134
3160: POP
3161: POP
// end ;
3162: LD_VAR 0 1
3166: RET
// function CountClassMembers ; var Mode ; begin
3167: LD_INT 0
3169: PPUSH
3170: PPUSH
// Mode := 1 ;
3171: LD_ADDR_VAR 0 2
3175: PUSH
3176: LD_INT 1
3178: ST_TO_ADDR
// neng := number_of_people ;
3179: LD_ADDR_LOC 5
3183: PUSH
3184: LD_EXP 10
3188: ST_TO_ADDR
// nsol := neng div [ 4 , 3 ] [ Mode ] ;
3189: LD_ADDR_LOC 8
3193: PUSH
3194: LD_LOC 5
3198: PUSH
3199: LD_INT 4
3201: PUSH
3202: LD_INT 3
3204: PUSH
3205: EMPTY
3206: LIST
3207: LIST
3208: PUSH
3209: LD_VAR 0 2
3213: ARRAY
3214: DIV
3215: ST_TO_ADDR
// if ( nsol < number_of_breastworks ) then
3216: LD_LOC 8
3220: PUSH
3221: LD_EXP 9
3225: LESS
3226: IFFALSE 3238
// nsol := number_of_breastworks ;
3228: LD_ADDR_LOC 8
3232: PUSH
3233: LD_EXP 9
3237: ST_TO_ADDR
// neng := neng - nsol ;
3238: LD_ADDR_LOC 5
3242: PUSH
3243: LD_LOC 5
3247: PUSH
3248: LD_LOC 8
3252: MINUS
3253: ST_TO_ADDR
// nsci := neng div [ 3 , 2 ] [ Mode ] ;
3254: LD_ADDR_LOC 6
3258: PUSH
3259: LD_LOC 5
3263: PUSH
3264: LD_INT 3
3266: PUSH
3267: LD_INT 2
3269: PUSH
3270: EMPTY
3271: LIST
3272: LIST
3273: PUSH
3274: LD_VAR 0 2
3278: ARRAY
3279: DIV
3280: ST_TO_ADDR
// if ( nsci < 1 ) then
3281: LD_LOC 6
3285: PUSH
3286: LD_INT 1
3288: LESS
3289: IFFALSE 3299
// nsci := 1 ;
3291: LD_ADDR_LOC 6
3295: PUSH
3296: LD_INT 1
3298: ST_TO_ADDR
// neng := neng - nsci ;
3299: LD_ADDR_LOC 5
3303: PUSH
3304: LD_LOC 5
3308: PUSH
3309: LD_LOC 6
3313: MINUS
3314: ST_TO_ADDR
// nmech := [ neng div 2 , 0 ] [ Mode ] ;
3315: LD_ADDR_LOC 7
3319: PUSH
3320: LD_LOC 5
3324: PUSH
3325: LD_INT 2
3327: DIV
3328: PUSH
3329: LD_INT 0
3331: PUSH
3332: EMPTY
3333: LIST
3334: LIST
3335: PUSH
3336: LD_VAR 0 2
3340: ARRAY
3341: ST_TO_ADDR
// neng := neng - nmech ;
3342: LD_ADDR_LOC 5
3346: PUSH
3347: LD_LOC 5
3351: PUSH
3352: LD_LOC 7
3356: MINUS
3357: ST_TO_ADDR
// if ( neng < 1 ) then
3358: LD_LOC 5
3362: PUSH
3363: LD_INT 1
3365: LESS
3366: IFFALSE 3376
// neng := 1 ;
3368: LD_ADDR_LOC 5
3372: PUSH
3373: LD_INT 1
3375: ST_TO_ADDR
// end ;
3376: LD_VAR 0 1
3380: RET
// starting var i ; begin enable_human_prediction := true ;
3381: LD_ADDR_OWVAR 51
3385: PUSH
3386: LD_INT 1
3388: ST_TO_ADDR
// mp_selectmsg := true ;
3389: LD_ADDR_OWVAR 13
3393: PUSH
3394: LD_INT 1
3396: ST_TO_ADDR
// read_multiplayer_and_game_parameters ;
3397: CALL 0 0 0
// init_map ;
3401: CALL 971 0 0
// init_respawning ;
3405: CALL 3488 0 0
// set_shared_visions_and_alliances ;
3409: CALL 1466 0 0
// ResetFog ;
3413: CALL_OW 335
// prepare_sides ;
3417: CALL 3098 0 0
// ShowTimer ;
3421: CALL 4543 0 0
// music_nat := Side_Nations [ your_side ] ;
3425: LD_ADDR_OWVAR 71
3429: PUSH
3430: LD_EXP 29
3434: PUSH
3435: LD_OWVAR 2
3439: ARRAY
3440: ST_TO_ADDR
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
3441: LD_EXP 34
3445: PUSH
3446: LD_EXP 28
3450: PUSH
3451: LD_OWVAR 2
3455: ARRAY
3456: ARRAY
3457: PUSH
3458: LD_INT 1
3460: ARRAY
3461: PPUSH
3462: LD_EXP 34
3466: PUSH
3467: LD_EXP 28
3471: PUSH
3472: LD_OWVAR 2
3476: ARRAY
3477: ARRAY
3478: PUSH
3479: LD_INT 2
3481: ARRAY
3482: PPUSH
3483: CALL_OW 86
// end ; end_of_file
3487: END
// var respawn , inqueue ; export function init_respawning ; begin
3488: LD_INT 0
3490: PPUSH
// respawn := Rand ( 1 , 8 ) ;
3491: LD_ADDR_LOC 9
3495: PUSH
3496: LD_INT 1
3498: PPUSH
3499: LD_INT 8
3501: PPUSH
3502: CALL_OW 12
3506: ST_TO_ADDR
// inqueue := [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
3507: LD_ADDR_LOC 10
3511: PUSH
3512: LD_INT 0
3514: PUSH
3515: LD_INT 0
3517: PUSH
3518: LD_INT 0
3520: PUSH
3521: LD_INT 0
3523: PUSH
3524: LD_INT 0
3526: PUSH
3527: LD_INT 0
3529: PUSH
3530: LD_INT 0
3532: PUSH
3533: LD_INT 0
3535: PUSH
3536: EMPTY
3537: LIST
3538: LIST
3539: LIST
3540: LIST
3541: LIST
3542: LIST
3543: LIST
3544: LIST
3545: ST_TO_ADDR
// end ;
3546: LD_VAR 0 1
3550: RET
// every 0 0$1 + 0 0$0.5 do var n , dep , aktresp ;
3551: GO 3553
3553: DISABLE
3554: LD_INT 0
3556: PPUSH
3557: PPUSH
3558: PPUSH
// begin if respawning_time_max = 0 then
3559: LD_EXP 19
3563: PUSH
3564: LD_INT 0
3566: EQUAL
3567: IFFALSE 3571
// exit ;
3569: GO 3976
// if respawn = 8 then
3571: LD_LOC 9
3575: PUSH
3576: LD_INT 8
3578: EQUAL
3579: IFFALSE 3591
// respawn := 1 else
3581: LD_ADDR_LOC 9
3585: PUSH
3586: LD_INT 1
3588: ST_TO_ADDR
3589: GO 3605
// respawn := respawn + 1 ;
3591: LD_ADDR_LOC 9
3595: PUSH
3596: LD_LOC 9
3600: PUSH
3601: LD_INT 1
3603: PLUS
3604: ST_TO_ADDR
// if Side_Positions [ respawn ] and not inqueue [ respawn ] then
3605: LD_EXP 28
3609: PUSH
3610: LD_LOC 9
3614: ARRAY
3615: PUSH
3616: LD_LOC 10
3620: PUSH
3621: LD_LOC 9
3625: ARRAY
3626: NOT
3627: AND
3628: IFFALSE 3975
// begin n := FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , respawn ] , f_not , [ f_nation , nation_nature ] ] ) ;
3630: LD_ADDR_VAR 0 1
3634: PUSH
3635: LD_INT 21
3637: PUSH
3638: LD_INT 1
3640: PUSH
3641: EMPTY
3642: LIST
3643: LIST
3644: PUSH
3645: LD_INT 22
3647: PUSH
3648: LD_LOC 9
3652: PUSH
3653: EMPTY
3654: LIST
3655: LIST
3656: PUSH
3657: LD_INT 3
3659: PUSH
3660: LD_INT 23
3662: PUSH
3663: LD_INT 0
3665: PUSH
3666: EMPTY
3667: LIST
3668: LIST
3669: PUSH
3670: EMPTY
3671: LIST
3672: LIST
3673: LIST
3674: LIST
3675: PPUSH
3676: CALL_OW 69
3680: ST_TO_ADDR
// if n < number_of_people then
3681: LD_VAR 0 1
3685: PUSH
3686: LD_EXP 10
3690: LESS
3691: IFFALSE 3972
// begin dep := FilterAllUnits ( [ [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_side , respawn ] ] ) ;
3693: LD_ADDR_VAR 0 2
3697: PUSH
3698: LD_INT 21
3700: PUSH
3701: LD_INT 3
3703: PUSH
3704: EMPTY
3705: LIST
3706: LIST
3707: PUSH
3708: LD_INT 2
3710: PUSH
3711: LD_INT 30
3713: PUSH
3714: LD_INT 0
3716: PUSH
3717: EMPTY
3718: LIST
3719: LIST
3720: PUSH
3721: LD_INT 30
3723: PUSH
3724: LD_INT 1
3726: PUSH
3727: EMPTY
3728: LIST
3729: LIST
3730: PUSH
3731: EMPTY
3732: LIST
3733: LIST
3734: LIST
3735: PUSH
3736: LD_INT 50
3738: PUSH
3739: EMPTY
3740: LIST
3741: PUSH
3742: LD_INT 22
3744: PUSH
3745: LD_LOC 9
3749: PUSH
3750: EMPTY
3751: LIST
3752: LIST
3753: PUSH
3754: EMPTY
3755: LIST
3756: LIST
3757: LIST
3758: LIST
3759: PPUSH
3760: CALL_OW 69
3764: ST_TO_ADDR
// if dep then
3765: LD_VAR 0 2
3769: IFFALSE 3969
// begin aktresp := respawn ;
3771: LD_ADDR_VAR 0 3
3775: PUSH
3776: LD_LOC 9
3780: ST_TO_ADDR
// inqueue := Replace ( inqueue , aktresp , true ) ;
3781: LD_ADDR_LOC 10
3785: PUSH
3786: LD_LOC 10
3790: PPUSH
3791: LD_VAR 0 3
3795: PPUSH
3796: LD_INT 1
3798: PPUSH
3799: CALL_OW 1
3803: ST_TO_ADDR
// enable ;
3804: ENABLE
// wait ( rand ( respawning_time_min , respawning_time_max ) ) ;
3805: LD_EXP 18
3809: PPUSH
3810: LD_EXP 19
3814: PPUSH
3815: CALL_OW 12
3819: PPUSH
3820: CALL_OW 67
// inqueue := Replace ( inqueue , aktresp , false ) ;
3824: LD_ADDR_LOC 10
3828: PUSH
3829: LD_LOC 10
3833: PPUSH
3834: LD_VAR 0 3
3838: PPUSH
3839: LD_INT 0
3841: PPUSH
3842: CALL_OW 1
3846: ST_TO_ADDR
// hc_name :=  ;
3847: LD_ADDR_OWVAR 26
3851: PUSH
3852: LD_STRING 
3854: ST_TO_ADDR
// hc_importance := 0 ;
3855: LD_ADDR_OWVAR 32
3859: PUSH
3860: LD_INT 0
3862: ST_TO_ADDR
// PrepareHuman ( 0 , 0 , skill_level div 2 ) ;
3863: LD_INT 0
3865: PPUSH
3866: LD_INT 0
3868: PPUSH
3869: LD_EXP 11
3873: PUSH
3874: LD_INT 2
3876: DIV
3877: PPUSH
3878: CALL_OW 380
// uc_nation := Side_Nations [ aktresp ] ;
3882: LD_ADDR_OWVAR 21
3886: PUSH
3887: LD_EXP 29
3891: PUSH
3892: LD_VAR 0 3
3896: ARRAY
3897: ST_TO_ADDR
// uc_side := aktresp ;
3898: LD_ADDR_OWVAR 20
3902: PUSH
3903: LD_VAR 0 3
3907: ST_TO_ADDR
// dep := dep [ Rand ( 1 , dep ) ] ;
3908: LD_ADDR_VAR 0 2
3912: PUSH
3913: LD_VAR 0 2
3917: PUSH
3918: LD_INT 1
3920: PPUSH
3921: LD_VAR 0 2
3925: PPUSH
3926: CALL_OW 12
3930: ARRAY
3931: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , GetX ( dep ) , GetY ( dep ) , 7 , true ) ;
3932: CALL_OW 44
3936: PPUSH
3937: LD_VAR 0 2
3941: PPUSH
3942: CALL_OW 250
3946: PPUSH
3947: LD_VAR 0 2
3951: PPUSH
3952: CALL_OW 251
3956: PPUSH
3957: LD_INT 7
3959: PPUSH
3960: LD_INT 1
3962: PPUSH
3963: CALL_OW 50
// end else
3967: GO 3970
// enable ;
3969: ENABLE
// end else
3970: GO 3973
// enable ;
3972: ENABLE
// end else
3973: GO 3976
// enable ;
3975: ENABLE
// end ; end_of_file
3976: PPOPN 3
3978: END
// on BuildingStarted ( b , u ) do begin if GetBType ( b ) in [ b_depot , b_warehouse ] then
3979: LD_VAR 0 1
3983: PPUSH
3984: CALL_OW 266
3988: PUSH
3989: LD_INT 0
3991: PUSH
3992: LD_INT 1
3994: PUSH
3995: EMPTY
3996: LIST
3997: LIST
3998: IN
3999: IFFALSE 4024
// SetBName ( b , @ & GetSide ( b ) ) ;
4001: LD_VAR 0 1
4005: PPUSH
4006: LD_STRING @
4008: PUSH
4009: LD_VAR 0 1
4013: PPUSH
4014: CALL_OW 255
4018: STR
4019: PPUSH
4020: CALL_OW 500
// end ;
4024: PPOPN 2
4026: END
// on BuildingCaptured ( b , o , e ) do begin if GetBType ( b ) in [ b_depot , b_warehouse ] then
4027: LD_VAR 0 1
4031: PPUSH
4032: CALL_OW 266
4036: PUSH
4037: LD_INT 0
4039: PUSH
4040: LD_INT 1
4042: PUSH
4043: EMPTY
4044: LIST
4045: LIST
4046: IN
4047: IFFALSE 4072
// SetBName ( b , @ & GetSide ( b ) ) ;
4049: LD_VAR 0 1
4053: PPUSH
4054: LD_STRING @
4056: PUSH
4057: LD_VAR 0 1
4061: PPUSH
4062: CALL_OW 255
4066: STR
4067: PPUSH
4068: CALL_OW 500
// end ; end_of_file
4072: PPOPN 3
4074: END
// every 1 1$0 + 0 0$0.3 marked 10 do
4075: GO 4077
4077: DISABLE
// begin CreateCratesAnywhere ( Rand ( 4 , 5 ) , true ) ;
4078: LD_INT 4
4080: PPUSH
4081: LD_INT 5
4083: PPUSH
4084: CALL_OW 12
4088: PPUSH
4089: LD_INT 1
4091: PPUSH
4092: CALL_OW 57
// enable ;
4096: ENABLE
// end ;
4097: END
// every 0 0$1 + 0 0$0.6 marked 10 do var i , amount ;
4098: GO 4100
4100: DISABLE
4101: LD_INT 0
4103: PPUSH
4104: PPUSH
// begin case tick of 1 .. 1 1$0 :
4105: LD_OWVAR 1
4109: PUSH
4110: LD_INT 1
4112: DOUBLE
4113: GREATEREQUAL
4114: IFFALSE 4122
4116: LD_INT 2100
4118: DOUBLE
4119: LESSEQUAL
4120: IFTRUE 4124
4122: GO 4152
4124: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$10 , 0 0$30 ) ) ; 1 1$0 + 1 .. 5 5$0 :
4125: LD_EXP 14
4129: PUSH
4130: LD_INT 100
4132: DIVREAL
4133: PUSH
4134: LD_INT 350
4136: PPUSH
4137: LD_INT 1050
4139: PPUSH
4140: CALL_OW 12
4144: MUL
4145: PPUSH
4146: CALL_OW 67
4150: GO 4454
4152: LD_INT 2100
4154: PUSH
4155: LD_INT 1
4157: PLUS
4158: DOUBLE
4159: GREATEREQUAL
4160: IFFALSE 4168
4162: LD_INT 10500
4164: DOUBLE
4165: LESSEQUAL
4166: IFTRUE 4170
4168: GO 4198
4170: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$30 , 0 0$45 ) ) ; 5 5$0 + 1 .. 10 10$0 :
4171: LD_EXP 14
4175: PUSH
4176: LD_INT 100
4178: DIVREAL
4179: PUSH
4180: LD_INT 1050
4182: PPUSH
4183: LD_INT 1575
4185: PPUSH
4186: CALL_OW 12
4190: MUL
4191: PPUSH
4192: CALL_OW 67
4196: GO 4454
4198: LD_INT 10500
4200: PUSH
4201: LD_INT 1
4203: PLUS
4204: DOUBLE
4205: GREATEREQUAL
4206: IFFALSE 4214
4208: LD_INT 21000
4210: DOUBLE
4211: LESSEQUAL
4212: IFTRUE 4216
4214: GO 4244
4216: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$45 , 1 1$0 ) ) ; 10 10$0 + 1 .. 20 20$0 :
4217: LD_EXP 14
4221: PUSH
4222: LD_INT 100
4224: DIVREAL
4225: PUSH
4226: LD_INT 1575
4228: PPUSH
4229: LD_INT 2100
4231: PPUSH
4232: CALL_OW 12
4236: MUL
4237: PPUSH
4238: CALL_OW 67
4242: GO 4454
4244: LD_INT 21000
4246: PUSH
4247: LD_INT 1
4249: PLUS
4250: DOUBLE
4251: GREATEREQUAL
4252: IFFALSE 4260
4254: LD_INT 42000
4256: DOUBLE
4257: LESSEQUAL
4258: IFTRUE 4262
4260: GO 4290
4262: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$0 , 1 1$15 ) ) ; 20 20$0 + 1 .. 30 30$0 :
4263: LD_EXP 14
4267: PUSH
4268: LD_INT 100
4270: DIVREAL
4271: PUSH
4272: LD_INT 2100
4274: PPUSH
4275: LD_INT 2625
4277: PPUSH
4278: CALL_OW 12
4282: MUL
4283: PPUSH
4284: CALL_OW 67
4288: GO 4454
4290: LD_INT 42000
4292: PUSH
4293: LD_INT 1
4295: PLUS
4296: DOUBLE
4297: GREATEREQUAL
4298: IFFALSE 4306
4300: LD_INT 63000
4302: DOUBLE
4303: LESSEQUAL
4304: IFTRUE 4308
4306: GO 4336
4308: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$15 , 1 1$30 ) ) ; 30 30$0 + 1 .. 50 50$0 :
4309: LD_EXP 14
4313: PUSH
4314: LD_INT 100
4316: DIVREAL
4317: PUSH
4318: LD_INT 2625
4320: PPUSH
4321: LD_INT 3150
4323: PPUSH
4324: CALL_OW 12
4328: MUL
4329: PPUSH
4330: CALL_OW 67
4334: GO 4454
4336: LD_INT 63000
4338: PUSH
4339: LD_INT 1
4341: PLUS
4342: DOUBLE
4343: GREATEREQUAL
4344: IFFALSE 4352
4346: LD_INT 105000
4348: DOUBLE
4349: LESSEQUAL
4350: IFTRUE 4354
4352: GO 4382
4354: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$30 , 1 1$45 ) ) ; 50 50$0 + 1 .. 300 300$0 :
4355: LD_EXP 14
4359: PUSH
4360: LD_INT 100
4362: DIVREAL
4363: PUSH
4364: LD_INT 3150
4366: PPUSH
4367: LD_INT 3675
4369: PPUSH
4370: CALL_OW 12
4374: MUL
4375: PPUSH
4376: CALL_OW 67
4380: GO 4454
4382: LD_INT 105000
4384: PUSH
4385: LD_INT 1
4387: PLUS
4388: DOUBLE
4389: GREATEREQUAL
4390: IFFALSE 4398
4392: LD_INT 630000
4394: DOUBLE
4395: LESSEQUAL
4396: IFTRUE 4400
4398: GO 4428
4400: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$45 , 2 2$0 ) ) ; else
4401: LD_EXP 14
4405: PUSH
4406: LD_INT 100
4408: DIVREAL
4409: PUSH
4410: LD_INT 3675
4412: PPUSH
4413: LD_INT 4200
4415: PPUSH
4416: CALL_OW 12
4420: MUL
4421: PPUSH
4422: CALL_OW 67
4426: GO 4454
4428: POP
// Wait ( shipments_density / 100 * Rand ( 2 2$0 , 2 2$30 ) ) ; end ;
4429: LD_EXP 14
4433: PUSH
4434: LD_INT 100
4436: DIVREAL
4437: PUSH
4438: LD_INT 4200
4440: PPUSH
4441: LD_INT 5250
4443: PPUSH
4444: CALL_OW 12
4448: MUL
4449: PPUSH
4450: CALL_OW 67
// amount := Rand ( 3 , 5 ) ;
4454: LD_ADDR_VAR 0 2
4458: PUSH
4459: LD_INT 3
4461: PPUSH
4462: LD_INT 5
4464: PPUSH
4465: CALL_OW 12
4469: ST_TO_ADDR
// for i in ( Side_Positions diff [ 0 ] ) do
4470: LD_ADDR_VAR 0 1
4474: PUSH
4475: LD_EXP 28
4479: PUSH
4480: LD_INT 0
4482: PUSH
4483: EMPTY
4484: LIST
4485: DIFF
4486: PUSH
4487: FOR_IN
4488: IFFALSE 4537
// CreateCratesXYR ( amount , start_def [ i ] [ 1 ] , start_def [ i ] [ 2 ] , 20 , true ) ;
4490: LD_VAR 0 2
4494: PPUSH
4495: LD_EXP 34
4499: PUSH
4500: LD_VAR 0 1
4504: ARRAY
4505: PUSH
4506: LD_INT 1
4508: ARRAY
4509: PPUSH
4510: LD_EXP 34
4514: PUSH
4515: LD_VAR 0 1
4519: ARRAY
4520: PUSH
4521: LD_INT 2
4523: ARRAY
4524: PPUSH
4525: LD_INT 20
4527: PPUSH
4528: LD_INT 1
4530: PPUSH
4531: CALL_OW 56
4535: GO 4487
4537: POP
4538: POP
// enable ;
4539: ENABLE
// end ; end_of_file
4540: PPOPN 2
4542: END
// export ExtraStrings ; export function ShowTimer ; var AllStrings ; begin
4543: LD_INT 0
4545: PPUSH
4546: PPUSH
// AllStrings := [ #Multi1x1-Time , tick ] ;
4547: LD_ADDR_VAR 0 2
4551: PUSH
4552: LD_STRING #Multi1x1-Time
4554: PUSH
4555: LD_OWVAR 1
4559: PUSH
4560: EMPTY
4561: LIST
4562: LIST
4563: ST_TO_ADDR
// if ( ExtraStrings ) then
4564: LD_EXP 42
4568: IFFALSE 4590
// AllStrings := AllStrings ^  ^ ExtraStrings ;
4570: LD_ADDR_VAR 0 2
4574: PUSH
4575: LD_VAR 0 2
4579: PUSH
4580: LD_STRING 
4582: ADD
4583: PUSH
4584: LD_EXP 42
4588: ADD
4589: ST_TO_ADDR
// Display_Strings := AllStrings ;
4590: LD_ADDR_OWVAR 47
4594: PUSH
4595: LD_VAR 0 2
4599: ST_TO_ADDR
// end ;
4600: LD_VAR 0 1
4604: RET
// every 0 0$1 do
4605: GO 4607
4607: DISABLE
// begin ShowTimer ;
4608: CALL 4543 0 0
// enable ;
4612: ENABLE
// end ; end_of_file
4613: END
// every 0 0$3 do
4614: GO 4616
4616: DISABLE
// begin InitHack ( 3 ) ;
4617: LD_INT 3
4619: PPUSH
4620: CALL 4636 0 1
// end ;
4624: END
// every 1 do
4625: GO 4627
4627: DISABLE
// begin InitHack ( 3 ) ;
4628: LD_INT 3
4630: PPUSH
4631: CALL 4636 0 1
// end ;
4635: END
// export vx_limit , vx_capture , vx_list , us_hack ; export function InitHack ( limit ) ; var i , tmp ; begin
4636: LD_INT 0
4638: PPUSH
4639: PPUSH
4640: PPUSH
// us_hack = 99 ;
4641: LD_ADDR_EXP 46
4645: PUSH
4646: LD_INT 99
4648: ST_TO_ADDR
// vx_list = [ ] ;
4649: LD_ADDR_EXP 45
4653: PUSH
4654: EMPTY
4655: ST_TO_ADDR
// vx_limit = limit ;
4656: LD_ADDR_EXP 43
4660: PUSH
4661: LD_VAR 0 1
4665: ST_TO_ADDR
// vx_capture = [ ] ;
4666: LD_ADDR_EXP 44
4670: PUSH
4671: EMPTY
4672: ST_TO_ADDR
// tmp := FilterAllUnits ( [ f_weapon , us_hack ] ) ;
4673: LD_ADDR_VAR 0 4
4677: PUSH
4678: LD_INT 34
4680: PUSH
4681: LD_EXP 46
4685: PUSH
4686: EMPTY
4687: LIST
4688: LIST
4689: PPUSH
4690: CALL_OW 69
4694: ST_TO_ADDR
// for i = 1 to tmp do
4695: LD_ADDR_VAR 0 3
4699: PUSH
4700: DOUBLE
4701: LD_INT 1
4703: DEC
4704: ST_TO_ADDR
4705: LD_VAR 0 4
4709: PUSH
4710: FOR_TO
4711: IFFALSE 4778
// begin vx_list := vx_list ^ [ [ tmp [ i ] , [ ] ] ] ;
4713: LD_ADDR_EXP 45
4717: PUSH
4718: LD_EXP 45
4722: PUSH
4723: LD_VAR 0 4
4727: PUSH
4728: LD_VAR 0 3
4732: ARRAY
4733: PUSH
4734: EMPTY
4735: PUSH
4736: EMPTY
4737: LIST
4738: LIST
4739: PUSH
4740: EMPTY
4741: LIST
4742: ADD
4743: ST_TO_ADDR
// vx_capture := vx_capture ^ [ [ tmp [ i ] , 0 ] ] ;
4744: LD_ADDR_EXP 44
4748: PUSH
4749: LD_EXP 44
4753: PUSH
4754: LD_VAR 0 4
4758: PUSH
4759: LD_VAR 0 3
4763: ARRAY
4764: PUSH
4765: LD_INT 0
4767: PUSH
4768: EMPTY
4769: LIST
4770: LIST
4771: PUSH
4772: EMPTY
4773: LIST
4774: ADD
4775: ST_TO_ADDR
// end ;
4776: GO 4710
4778: POP
4779: POP
// end ;
4780: LD_VAR 0 2
4784: RET
// export function AddVeh ( veh , e , s ) ; var i , tmp , tmp2 ; begin
4785: LD_INT 0
4787: PPUSH
4788: PPUSH
4789: PPUSH
4790: PPUSH
// for i = 1 to vx_list do
4791: LD_ADDR_VAR 0 5
4795: PUSH
4796: DOUBLE
4797: LD_INT 1
4799: DEC
4800: ST_TO_ADDR
4801: LD_EXP 45
4805: PUSH
4806: FOR_TO
4807: IFFALSE 4947
// if vx_list [ i ] [ 1 ] = veh then
4809: LD_EXP 45
4813: PUSH
4814: LD_VAR 0 5
4818: ARRAY
4819: PUSH
4820: LD_INT 1
4822: ARRAY
4823: PUSH
4824: LD_VAR 0 1
4828: EQUAL
4829: IFFALSE 4945
// begin tmp2 := Insert ( vx_list [ i ] [ 2 ] , vx_list [ i ] [ 2 ] + 1 , [ e , s ] ) ;
4831: LD_ADDR_VAR 0 7
4835: PUSH
4836: LD_EXP 45
4840: PUSH
4841: LD_VAR 0 5
4845: ARRAY
4846: PUSH
4847: LD_INT 2
4849: ARRAY
4850: PPUSH
4851: LD_EXP 45
4855: PUSH
4856: LD_VAR 0 5
4860: ARRAY
4861: PUSH
4862: LD_INT 2
4864: ARRAY
4865: PUSH
4866: LD_INT 1
4868: PLUS
4869: PPUSH
4870: LD_VAR 0 2
4874: PUSH
4875: LD_VAR 0 3
4879: PUSH
4880: EMPTY
4881: LIST
4882: LIST
4883: PPUSH
4884: CALL_OW 2
4888: ST_TO_ADDR
// tmp := Replace ( vx_list [ i ] , 2 , tmp2 ) ;
4889: LD_ADDR_VAR 0 6
4893: PUSH
4894: LD_EXP 45
4898: PUSH
4899: LD_VAR 0 5
4903: ARRAY
4904: PPUSH
4905: LD_INT 2
4907: PPUSH
4908: LD_VAR 0 7
4912: PPUSH
4913: CALL_OW 1
4917: ST_TO_ADDR
// vx_list := Replace ( vx_list , i , tmp ) ;
4918: LD_ADDR_EXP 45
4922: PUSH
4923: LD_EXP 45
4927: PPUSH
4928: LD_VAR 0 5
4932: PPUSH
4933: LD_VAR 0 6
4937: PPUSH
4938: CALL_OW 1
4942: ST_TO_ADDR
// break ;
4943: GO 4947
// end ;
4945: GO 4806
4947: POP
4948: POP
// end ;
4949: LD_VAR 0 4
4953: RET
// export function ChangeCapture ( veh , m ) ; var i , tmp ; begin
4954: LD_INT 0
4956: PPUSH
4957: PPUSH
4958: PPUSH
// for i = 1 to vx_capture do
4959: LD_ADDR_VAR 0 4
4963: PUSH
4964: DOUBLE
4965: LD_INT 1
4967: DEC
4968: ST_TO_ADDR
4969: LD_EXP 44
4973: PUSH
4974: FOR_TO
4975: IFFALSE 5073
// if vx_capture [ i ] [ 1 ] = veh then
4977: LD_EXP 44
4981: PUSH
4982: LD_VAR 0 4
4986: ARRAY
4987: PUSH
4988: LD_INT 1
4990: ARRAY
4991: PUSH
4992: LD_VAR 0 1
4996: EQUAL
4997: IFFALSE 5071
// begin tmp := Replace ( vx_capture [ i ] , 2 , vx_capture [ i ] [ 2 ] + ( m ) ) ;
4999: LD_ADDR_VAR 0 5
5003: PUSH
5004: LD_EXP 44
5008: PUSH
5009: LD_VAR 0 4
5013: ARRAY
5014: PPUSH
5015: LD_INT 2
5017: PPUSH
5018: LD_EXP 44
5022: PUSH
5023: LD_VAR 0 4
5027: ARRAY
5028: PUSH
5029: LD_INT 2
5031: ARRAY
5032: PUSH
5033: LD_VAR 0 2
5037: PLUS
5038: PPUSH
5039: CALL_OW 1
5043: ST_TO_ADDR
// vx_capture := Replace ( vx_capture , i , tmp ) ;
5044: LD_ADDR_EXP 44
5048: PUSH
5049: LD_EXP 44
5053: PPUSH
5054: LD_VAR 0 4
5058: PPUSH
5059: LD_VAR 0 5
5063: PPUSH
5064: CALL_OW 1
5068: ST_TO_ADDR
// break ;
5069: GO 5073
// end ;
5071: GO 4974
5073: POP
5074: POP
// end ;
5075: LD_VAR 0 3
5079: RET
// export function DisplayHacks ( veh ) ; var i , tmp ; begin
5080: LD_INT 0
5082: PPUSH
5083: PPUSH
5084: PPUSH
// result := false ;
5085: LD_ADDR_VAR 0 2
5089: PUSH
5090: LD_INT 0
5092: ST_TO_ADDR
// for i = 1 to vx_capture do
5093: LD_ADDR_VAR 0 3
5097: PUSH
5098: DOUBLE
5099: LD_INT 1
5101: DEC
5102: ST_TO_ADDR
5103: LD_EXP 44
5107: PUSH
5108: FOR_TO
5109: IFFALSE 5157
// if vx_capture [ i ] [ 1 ] = veh then
5111: LD_EXP 44
5115: PUSH
5116: LD_VAR 0 3
5120: ARRAY
5121: PUSH
5122: LD_INT 1
5124: ARRAY
5125: PUSH
5126: LD_VAR 0 1
5130: EQUAL
5131: IFFALSE 5155
// begin result := vx_capture [ i ] [ 2 ] ;
5133: LD_ADDR_VAR 0 2
5137: PUSH
5138: LD_EXP 44
5142: PUSH
5143: LD_VAR 0 3
5147: ARRAY
5148: PUSH
5149: LD_INT 2
5151: ARRAY
5152: ST_TO_ADDR
// break ;
5153: GO 5157
// end ;
5155: GO 5108
5157: POP
5158: POP
// SetUnitDisplayNumber ( veh , result ) ;
5159: LD_VAR 0 1
5163: PPUSH
5164: LD_VAR 0 2
5168: PPUSH
5169: CALL_OW 505
// end ;
5173: LD_VAR 0 2
5177: RET
// export function GetValue ( veh , m ) ; var i ; begin
5178: LD_INT 0
5180: PPUSH
5181: PPUSH
// result := false ;
5182: LD_ADDR_VAR 0 3
5186: PUSH
5187: LD_INT 0
5189: ST_TO_ADDR
// if not veh then
5190: LD_VAR 0 1
5194: NOT
5195: IFFALSE 5201
// exit else
5197: GO 5361
5199: GO 5361
// begin case m of list :
5201: LD_VAR 0 2
5205: PUSH
5206: LD_STRING list
5208: DOUBLE
5209: EQUAL
5210: IFTRUE 5214
5212: GO 5283
5214: POP
// begin for i = 1 to vx_list do
5215: LD_ADDR_VAR 0 4
5219: PUSH
5220: DOUBLE
5221: LD_INT 1
5223: DEC
5224: ST_TO_ADDR
5225: LD_EXP 45
5229: PUSH
5230: FOR_TO
5231: IFFALSE 5279
// if vx_list [ i ] [ 1 ] = veh then
5233: LD_EXP 45
5237: PUSH
5238: LD_VAR 0 4
5242: ARRAY
5243: PUSH
5244: LD_INT 1
5246: ARRAY
5247: PUSH
5248: LD_VAR 0 1
5252: EQUAL
5253: IFFALSE 5277
// begin result := vx_list [ i ] [ 2 ] ;
5255: LD_ADDR_VAR 0 3
5259: PUSH
5260: LD_EXP 45
5264: PUSH
5265: LD_VAR 0 4
5269: ARRAY
5270: PUSH
5271: LD_INT 2
5273: ARRAY
5274: ST_TO_ADDR
// break ;
5275: GO 5279
// end ;
5277: GO 5230
5279: POP
5280: POP
// end ; capt :
5281: GO 5361
5283: LD_STRING capt
5285: DOUBLE
5286: EQUAL
5287: IFTRUE 5291
5289: GO 5360
5291: POP
// begin for i = 1 to vx_capture do
5292: LD_ADDR_VAR 0 4
5296: PUSH
5297: DOUBLE
5298: LD_INT 1
5300: DEC
5301: ST_TO_ADDR
5302: LD_EXP 44
5306: PUSH
5307: FOR_TO
5308: IFFALSE 5356
// if vx_capture [ i ] [ 1 ] = veh then
5310: LD_EXP 44
5314: PUSH
5315: LD_VAR 0 4
5319: ARRAY
5320: PUSH
5321: LD_INT 1
5323: ARRAY
5324: PUSH
5325: LD_VAR 0 1
5329: EQUAL
5330: IFFALSE 5354
// begin result := vx_capture [ i ] [ 2 ] ;
5332: LD_ADDR_VAR 0 3
5336: PUSH
5337: LD_EXP 44
5341: PUSH
5342: LD_VAR 0 4
5346: ARRAY
5347: PUSH
5348: LD_INT 2
5350: ARRAY
5351: ST_TO_ADDR
// break ;
5352: GO 5356
// end ;
5354: GO 5307
5356: POP
5357: POP
// end ; end ;
5358: GO 5361
5360: POP
// end ; end ;
5361: LD_VAR 0 3
5365: RET
// every 0 0$01 do var i , j , e , vehx , old_side ;
5366: GO 5368
5368: DISABLE
5369: LD_INT 0
5371: PPUSH
5372: PPUSH
5373: PPUSH
5374: PPUSH
5375: PPUSH
// begin enable ;
5376: ENABLE
// vehx = FilterAllUnits ( [ f_weapon , us_hack ] ) ;
5377: LD_ADDR_VAR 0 4
5381: PUSH
5382: LD_INT 34
5384: PUSH
5385: LD_EXP 46
5389: PUSH
5390: EMPTY
5391: LIST
5392: LIST
5393: PPUSH
5394: CALL_OW 69
5398: ST_TO_ADDR
// for j = 1 to vehx do
5399: LD_ADDR_VAR 0 2
5403: PUSH
5404: DOUBLE
5405: LD_INT 1
5407: DEC
5408: ST_TO_ADDR
5409: LD_VAR 0 4
5413: PUSH
5414: FOR_TO
5415: IFFALSE 5680
// begin e = FilterAllUnits ( [ [ f_enemy , GetSide ( vehx [ j ] ) ] , [ f_control , control_computer ] , [ f_not , [ f_weapon , us_hack ] ] ] ) ;
5417: LD_ADDR_VAR 0 3
5421: PUSH
5422: LD_INT 81
5424: PUSH
5425: LD_VAR 0 4
5429: PUSH
5430: LD_VAR 0 2
5434: ARRAY
5435: PPUSH
5436: CALL_OW 255
5440: PUSH
5441: EMPTY
5442: LIST
5443: LIST
5444: PUSH
5445: LD_INT 33
5447: PUSH
5448: LD_INT 3
5450: PUSH
5451: EMPTY
5452: LIST
5453: LIST
5454: PUSH
5455: LD_INT 3
5457: PUSH
5458: LD_INT 34
5460: PUSH
5461: LD_EXP 46
5465: PUSH
5466: EMPTY
5467: LIST
5468: LIST
5469: PUSH
5470: EMPTY
5471: LIST
5472: LIST
5473: PUSH
5474: EMPTY
5475: LIST
5476: LIST
5477: LIST
5478: PPUSH
5479: CALL_OW 69
5483: ST_TO_ADDR
// if not e then
5484: LD_VAR 0 3
5488: NOT
5489: IFFALSE 5493
// continue ;
5491: GO 5414
// i := NearestUnitToUnit ( e , vehx [ j ] ) ;
5493: LD_ADDR_VAR 0 1
5497: PUSH
5498: LD_VAR 0 3
5502: PPUSH
5503: LD_VAR 0 4
5507: PUSH
5508: LD_VAR 0 2
5512: ARRAY
5513: PPUSH
5514: CALL_OW 74
5518: ST_TO_ADDR
// if GetDistUnits ( vehx [ j ] , i ) <= 12 and GetValue ( vehx [ j ] , capt ) < vx_limit then
5519: LD_VAR 0 4
5523: PUSH
5524: LD_VAR 0 2
5528: ARRAY
5529: PPUSH
5530: LD_VAR 0 1
5534: PPUSH
5535: CALL_OW 296
5539: PUSH
5540: LD_INT 12
5542: LESSEQUAL
5543: PUSH
5544: LD_VAR 0 4
5548: PUSH
5549: LD_VAR 0 2
5553: ARRAY
5554: PPUSH
5555: LD_STRING capt
5557: PPUSH
5558: CALL 5178 0 2
5562: PUSH
5563: LD_EXP 43
5567: LESS
5568: AND
5569: IFFALSE 5678
// begin ChangeCapture ( vehx [ j ] , 1 ) ;
5571: LD_VAR 0 4
5575: PUSH
5576: LD_VAR 0 2
5580: ARRAY
5581: PPUSH
5582: LD_INT 1
5584: PPUSH
5585: CALL 4954 0 2
// old_side = GetSide ( i ) ;
5589: LD_ADDR_VAR 0 5
5593: PUSH
5594: LD_VAR 0 1
5598: PPUSH
5599: CALL_OW 255
5603: ST_TO_ADDR
// SetSide ( i , GetSide ( vehx [ j ] ) ) ;
5604: LD_VAR 0 1
5608: PPUSH
5609: LD_VAR 0 4
5613: PUSH
5614: LD_VAR 0 2
5618: ARRAY
5619: PPUSH
5620: CALL_OW 255
5624: PPUSH
5625: CALL_OW 235
// ComStop ( i ) ;
5629: LD_VAR 0 1
5633: PPUSH
5634: CALL_OW 141
// DisplayHacks ( vehx [ j ] ) ;
5638: LD_VAR 0 4
5642: PUSH
5643: LD_VAR 0 2
5647: ARRAY
5648: PPUSH
5649: CALL 5080 0 1
// AddVeh ( vehx [ j ] , i , old_side ) ;
5653: LD_VAR 0 4
5657: PUSH
5658: LD_VAR 0 2
5662: ARRAY
5663: PPUSH
5664: LD_VAR 0 1
5668: PPUSH
5669: LD_VAR 0 5
5673: PPUSH
5674: CALL 4785 0 3
// end ; end ;
5678: GO 5414
5680: POP
5681: POP
// end ;
5682: PPOPN 5
5684: END
// on UnitDestroyed ( un ) do var i , j , tmp , t , t2 ;
5685: LD_INT 0
5687: PPUSH
5688: PPUSH
5689: PPUSH
5690: PPUSH
5691: PPUSH
// begin if un in FilterAllUnits ( [ f_weapon , us_hack ] ) then
5692: LD_VAR 0 1
5696: PUSH
5697: LD_INT 34
5699: PUSH
5700: LD_EXP 46
5704: PUSH
5705: EMPTY
5706: LIST
5707: LIST
5708: PPUSH
5709: CALL_OW 69
5713: IN
5714: IFFALSE 5897
// begin for i = 1 to vx_list do
5716: LD_ADDR_VAR 0 2
5720: PUSH
5721: DOUBLE
5722: LD_INT 1
5724: DEC
5725: ST_TO_ADDR
5726: LD_EXP 45
5730: PUSH
5731: FOR_TO
5732: IFFALSE 5895
// if un = vx_list [ i ] [ 1 ] then
5734: LD_VAR 0 1
5738: PUSH
5739: LD_EXP 45
5743: PUSH
5744: LD_VAR 0 2
5748: ARRAY
5749: PUSH
5750: LD_INT 1
5752: ARRAY
5753: EQUAL
5754: IFFALSE 5893
// begin for j = 1 to vx_list [ i ] [ 2 ] do
5756: LD_ADDR_VAR 0 3
5760: PUSH
5761: DOUBLE
5762: LD_INT 1
5764: DEC
5765: ST_TO_ADDR
5766: LD_EXP 45
5770: PUSH
5771: LD_VAR 0 2
5775: ARRAY
5776: PUSH
5777: LD_INT 2
5779: ARRAY
5780: PUSH
5781: FOR_TO
5782: IFFALSE 5869
// begin SetSide ( vx_list [ i ] [ 2 ] [ j ] [ 1 ] , vx_list [ i ] [ 2 ] [ j ] [ 2 ] ) ;
5784: LD_EXP 45
5788: PUSH
5789: LD_VAR 0 2
5793: ARRAY
5794: PUSH
5795: LD_INT 2
5797: ARRAY
5798: PUSH
5799: LD_VAR 0 3
5803: ARRAY
5804: PUSH
5805: LD_INT 1
5807: ARRAY
5808: PPUSH
5809: LD_EXP 45
5813: PUSH
5814: LD_VAR 0 2
5818: ARRAY
5819: PUSH
5820: LD_INT 2
5822: ARRAY
5823: PUSH
5824: LD_VAR 0 3
5828: ARRAY
5829: PUSH
5830: LD_INT 2
5832: ARRAY
5833: PPUSH
5834: CALL_OW 235
// ComStop ( vx_list [ i ] [ 2 ] [ j ] [ 1 ] ) ;
5838: LD_EXP 45
5842: PUSH
5843: LD_VAR 0 2
5847: ARRAY
5848: PUSH
5849: LD_INT 2
5851: ARRAY
5852: PUSH
5853: LD_VAR 0 3
5857: ARRAY
5858: PUSH
5859: LD_INT 1
5861: ARRAY
5862: PPUSH
5863: CALL_OW 141
// end ;
5867: GO 5781
5869: POP
5870: POP
// vx_list := Delete ( vx_list , i ) ;
5871: LD_ADDR_EXP 45
5875: PUSH
5876: LD_EXP 45
5880: PPUSH
5881: LD_VAR 0 2
5885: PPUSH
5886: CALL_OW 3
5890: ST_TO_ADDR
// break ;
5891: GO 5895
// end ;
5893: GO 5731
5895: POP
5896: POP
// end ; if un in FilterAllUnits ( [ f_control , control_computer ] ) and not un in FilterAllUnits ( [ f_weapon , us_hack ] ) then
5897: LD_VAR 0 1
5901: PUSH
5902: LD_INT 33
5904: PUSH
5905: LD_INT 3
5907: PUSH
5908: EMPTY
5909: LIST
5910: LIST
5911: PPUSH
5912: CALL_OW 69
5916: IN
5917: PUSH
5918: LD_VAR 0 1
5922: PUSH
5923: LD_INT 34
5925: PUSH
5926: LD_EXP 46
5930: PUSH
5931: EMPTY
5932: LIST
5933: LIST
5934: PPUSH
5935: CALL_OW 69
5939: IN
5940: NOT
5941: AND
5942: IFFALSE 6178
// begin if isEditor = 1 then
5944: LD_OWVAR 84
5948: PUSH
5949: LD_INT 1
5951: EQUAL
5952: IFFALSE 5964
// display_strings := un ;
5954: LD_ADDR_OWVAR 47
5958: PUSH
5959: LD_VAR 0 1
5963: ST_TO_ADDR
// for i = 1 to vx_list do
5964: LD_ADDR_VAR 0 2
5968: PUSH
5969: DOUBLE
5970: LD_INT 1
5972: DEC
5973: ST_TO_ADDR
5974: LD_EXP 45
5978: PUSH
5979: FOR_TO
5980: IFFALSE 6176
// begin for j = 1 to vx_list [ i ] [ 2 ] do
5982: LD_ADDR_VAR 0 3
5986: PUSH
5987: DOUBLE
5988: LD_INT 1
5990: DEC
5991: ST_TO_ADDR
5992: LD_EXP 45
5996: PUSH
5997: LD_VAR 0 2
6001: ARRAY
6002: PUSH
6003: LD_INT 2
6005: ARRAY
6006: PUSH
6007: FOR_TO
6008: IFFALSE 6172
// if un = vx_list [ i ] [ 2 ] [ j ] [ 1 ] then
6010: LD_VAR 0 1
6014: PUSH
6015: LD_EXP 45
6019: PUSH
6020: LD_VAR 0 2
6024: ARRAY
6025: PUSH
6026: LD_INT 2
6028: ARRAY
6029: PUSH
6030: LD_VAR 0 3
6034: ARRAY
6035: PUSH
6036: LD_INT 1
6038: ARRAY
6039: EQUAL
6040: IFFALSE 6170
// begin tmp := vx_list [ i ] [ 1 ] ;
6042: LD_ADDR_VAR 0 4
6046: PUSH
6047: LD_EXP 45
6051: PUSH
6052: LD_VAR 0 2
6056: ARRAY
6057: PUSH
6058: LD_INT 1
6060: ARRAY
6061: ST_TO_ADDR
// t := Delete ( vx_list [ i ] [ 2 ] , j ) ;
6062: LD_ADDR_VAR 0 5
6066: PUSH
6067: LD_EXP 45
6071: PUSH
6072: LD_VAR 0 2
6076: ARRAY
6077: PUSH
6078: LD_INT 2
6080: ARRAY
6081: PPUSH
6082: LD_VAR 0 3
6086: PPUSH
6087: CALL_OW 3
6091: ST_TO_ADDR
// t2 := Replace ( vx_list [ i ] , 2 , t ) ;
6092: LD_ADDR_VAR 0 6
6096: PUSH
6097: LD_EXP 45
6101: PUSH
6102: LD_VAR 0 2
6106: ARRAY
6107: PPUSH
6108: LD_INT 2
6110: PPUSH
6111: LD_VAR 0 5
6115: PPUSH
6116: CALL_OW 1
6120: ST_TO_ADDR
// vx_list := Replace ( vx_list , i , t2 ) ;
6121: LD_ADDR_EXP 45
6125: PUSH
6126: LD_EXP 45
6130: PPUSH
6131: LD_VAR 0 2
6135: PPUSH
6136: LD_VAR 0 6
6140: PPUSH
6141: CALL_OW 1
6145: ST_TO_ADDR
// ChangeCapture ( tmp , - 1 ) ;
6146: LD_VAR 0 4
6150: PPUSH
6151: LD_INT 1
6153: NEG
6154: PPUSH
6155: CALL 4954 0 2
// DisplayHacks ( tmp ) ;
6159: LD_VAR 0 4
6163: PPUSH
6164: CALL 5080 0 1
// break ;
6168: GO 6172
// end ;
6170: GO 6007
6172: POP
6173: POP
// end ;
6174: GO 5979
6176: POP
6177: POP
// end ; end ;
6178: PPOPN 6
6180: END
// every 0 0$01 do var c , list , un ;
6181: GO 6183
6183: DISABLE
6184: LD_INT 0
6186: PPUSH
6187: PPUSH
6188: PPUSH
// begin list = FilterAllUnits ( [ [ f_weapon , 98 ] ] ) ;
6189: LD_ADDR_VAR 0 2
6193: PUSH
6194: LD_INT 34
6196: PUSH
6197: LD_INT 98
6199: PUSH
6200: EMPTY
6201: LIST
6202: LIST
6203: PUSH
6204: EMPTY
6205: LIST
6206: PPUSH
6207: CALL_OW 69
6211: ST_TO_ADDR
// enable ;
6212: ENABLE
// for un in list do
6213: LD_ADDR_VAR 0 3
6217: PUSH
6218: LD_VAR 0 2
6222: PUSH
6223: FOR_IN
6224: IFFALSE 6287
// begin c = WantsToAttack ( un ) ;
6226: LD_ADDR_VAR 0 1
6230: PUSH
6231: LD_VAR 0 3
6235: PPUSH
6236: CALL_OW 319
6240: ST_TO_ADDR
// if UnitShoot ( c ) = un then
6241: LD_VAR 0 1
6245: PPUSH
6246: CALL_OW 504
6250: PUSH
6251: LD_VAR 0 3
6255: EQUAL
6256: IFFALSE 6285
// ArtContamination ( GetX ( c ) , GetY ( c ) , 1 ) ;
6258: LD_VAR 0 1
6262: PPUSH
6263: CALL_OW 250
6267: PPUSH
6268: LD_VAR 0 1
6272: PPUSH
6273: CALL_OW 251
6277: PPUSH
6278: LD_INT 1
6280: PPUSH
6281: CALL_OW 495
// end ;
6285: GO 6223
6287: POP
6288: POP
// end ;
6289: PPOPN 3
6291: END
